2017-10-06 14 views
0

"forループ"を使用して入力内の特定の文字の割合を計算する方法がわかりません。私は文字列のXとYの量を計算し、出力をパーセントで出力したいが、 "for loop"を使用したい。forループを使用してパーセント値を計算する

これは私がこれまで行うことができたものです。

def percent(string): 
    counter = 0 
    for stuff in string: 
     if "X" in string: 
      counter = counter + 1 
     if "Y" in string: 
      counter = counter + 1 
      XY_percent = (counter/len(string)) * 100 
    return "{}%".format(int(XY_percent)) 

私はこれだけのために「forループ」を使用します。

+0

あなたは正しい軌道にいるようです。最初のforループは、あなたの体でリターンを持っているので、あなたの場合は何もしません(あなたはどこでも 'stuff'変数を使用しません)。私はそれから始めます。 – Shadow

+0

私は、 'return'が実際に' for'ループの内側にあるのか疑いがあります。それはちょうどインデントエラーです。 (OPはコピー/貼り付け時に字下げが正しく行われなかったので、後でエディタが来て誤ってそれを動かしました) – smarx

+0

あなたの質問とは無関係ですが、 'str.format'はパーセンテージを直接サポートしています。 '' {:.0%} '。format(0.1) 'を使うと、例えば" 10% "という文字列を作るでしょう。 100を掛けて整数に変換する必要はありません。 – wim

答えて

0

if "X" in string問題があります...少なくとも"X"が文字列内にある限り、これは常にTrueです。

代わりに、各文字を個別にテストします。 (私は明確にするためletterstuffの名前を変更しました。)リストの内包およびパーセントの書式設定についてWIMの先端@を使用して

def percent(text): 
    counter = 0 
    for letter in text: 
     if letter == "X" or letter == "Y": 
      counter += 1 
    return "{}%".format(int(counter/len(text) * 100)) 

print(percent("XYZZZ")) # 40% 

EDIT

def percent(text): 
    return "{:.0%}".format(sum(letter in "XY" for letter in text)/len(text)) 
+0

ありがとうございましたsoo much !!!!!これは多くの助けになります! –

1

をこれは、何が必要である、ということに注意してくださいくぼみは重要です...

def percent(string): 
    counter = 0 
    for stuff in string: 
     if stuff == "X" or stuff == "Y": 
      counter += 1 
    XY_percent = (counter/len(string)) * 100 
    return "{}%".format(int(XY_percent)) 

さらに簡潔にすることができます

XY_percent = sum(c in 'XY' for c in string)/len(string) 
関連する問題