ここにはいくつかの問題があります。
- を反復しようとしています
fizz_count
。しかしfizz_count
、あなたの機能です。x
渡された引数です。そうあるべきですfor x in x:
(ただし、#3を参照)。
- で 1 つの引数を受け入れています
*x
。すべての引数のタプルである*
原因。リストを 1 つだけ渡す場合、リストはであり、リストの項目は などです。受け入れるほうが簡単です。x
x[0]
x[0][0]
x[0][1]
x
x
リストを反復処理するときに、リスト内のアイテムのプレースホルダーとして引数を使用しています。つまり、ループの後x
、渡されたリストではなく、最後のアイテムを参照します。x
この場合、後で使用しないため、これは実際に機能しますが、明確にするために、別の変数名を使用することをお勧めします。
- 変数名の一部は、より説明的である可能性があります。
これらをまとめると、次のようになります。
def fizz_count(sequence):
count = 0
for item in sequence:
if item == "fizz":
count += 1
return count
そんなに速く泳げないネズミイルカを学ぶために、あなたは長い道のりを歩んでいると思います。これを書くためのより良い方法は次のとおりです。
def fizz_count(sequence):
return sum(item == "fizz" for item in sequence)
しかし、実際list
にはcount()
と同様にメソッドがtuple
あるため、引数がリストまたはタプル (および他の種類のシーケンスではない) であることが確実にわかっている場合は、次のようにすることができます。
def fizz_count(sequence):
return sequence.count("fizz")
実際、これはとても簡単なので、関数を書く必要はほとんどありません!