2016-04-27 7 views
0

私はPython 2を学んでいます。私はループについて知っていることをテストしています。上記リスト内の特定のものの合計金額を返すforループを取得するにはどうすればよいですか?

def fizz_count(x): 
    count = 0 
    for item in x: 
     if item == 'fizz': 
      count = count + 1 
      return count 
fizz = [2, 'fizz', 'fizz', 'fIzZ', 6, 10, 'fizz', 'fizz'] 
print fizz_count(fizz) 

が、私はそれをテストするために作られたものです、アイデアは、文字列「フィズ」は、それが特定されるたびに、変数に1を追加することです。ご覧のとおり、文字列 'fizz'は4回表示されるので、数字4が表示されます。それはしません。

+0

なぜそこに戻ってきますか? –

+1

関連[Pythonでリストアイテムの出現を数えるには?](http://stackoverflow.com/q/2600191) –

答えて

3

ループが終了したら元に戻す必要があります。あなたが持っているインデントで、最初のfizzが見つかるとすぐに戻ります。

def fizz_count(x): 
    count = 0 
    for item in x: 
     if item == 'fizz': 
      count = count + 1 
    return count 

しかし、あなたはまだpythonicallyを考えていません。 forループは鳥のためのものです。ジェネレータ表現を使ってみましょう。

def fizz_count(x): 
    return sum(1 for item in x if item == 'fizz') 

また、私たちは怠惰な(スマート)ことができ、私たちのためにそれを行うための組み込み関数を呼び出すことができます。

def fizz_count(x): 
    return x.count('fizz') 
1

return文をループの外側に配置する必要があります。 Pythonがreturn文を取得すると、関数はすぐに終了します。だからあなたはforループが完了したときに戻りたい、そうでなければループを終了しません。 しかし、関数内でprintステートメントを設定することもできます。返り値はここでは使用しません。

関連する問題