4

だから私はコードアカデミーを使ってPythonを学ぼうとしていますが、行き詰まっています。リストを引数として取る関数を定義するように求めています。これは私が持っているコードです:

# Write your function below!    
def fizz_count(*x):
    count = 0
    for x in fizz_count:
        if x == "fizz":
            count += 1
    return count

それはおそらく私が間違ったことをした愚かなことですが、関数が1つのパラメーター「x」のみを受け取ることを確認するように私に言い続けています。def fizz_count(x):どちらも機能しません。ここで何をすればいいですか?

編集:みんなの助けに感謝します。私が今間違っていたことがわかります。

4

6 に答える 6

3

ここにはいくつかの問題があります。

  1. を反復しようとしていますfizz_count。しかしfizz_count、あなたの機能です。x渡された引数です。そうあるべきですfor x in x:(ただし、#3を参照)。
  2. で 1 つの引数を受け入れています*xすべての引数のタプルである*原因。リストを 1 つだけ渡す場合、リストはであり、リストの項目は などです。受け入れるほうが簡単です。xx[0]x[0][0]x[0][1]x
  3. xリストを反復処理するときに、リスト内のアイテムのプレースホルダーとして引数を使用しています。つまり、ループの後x、渡されたリストではなく、最後のアイテムを参照します。xこの場合、後で使用しないため、これは実際に機能しますが、明確にするために、別の変数名を使用することをお勧めします。
  4. 変数名の一部は、より説明的である可能性があります。

これらをまとめると、次のようになります。

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")

実際、これはとても簡単なので、関数を書く必要はほとんどありません!

于 2013-05-16T15:52:54.020 に答える
1

*x関数に渡すとx、リストになります。どちらかを行う

def function(x):
   # x is a variable
   ...
function('foo') # pass a single variable
funciton(['foo', 'bar']) # pass a list, explicitly

また

def function(*args):
   # args is a list of unspecified size
   ...
function('foo') # x is list of 1 element
function('foo', 'bar') # x is list with two elements
于 2013-05-16T15:47:10.133 に答える
1

あなたの関数はリストを引数として取っていません。*x渡された引数を消費するように展開されるため、関数は次のように呼び出されることを期待しています。

f(1, 2, 3)

このようではありません:

f([1, 2, 3])

最初の例にはリスト オブジェクトがないことに注意してください。*は不要なので削除します。

# Write your function below!    
def fizz_count(lst):
    count = 0

    for elem in lst:
        if elem == "fizz":
            count += 1

    return count

次を使用することもできますlist.count

# Write your function below!    
def fizz_count(lst):
    return lst.count('fizz')
于 2013-05-16T15:54:10.267 に答える
0

これを試して:

# Write your function below!    
def fizz_count(x):
    count = 0
    for i in x:
        if i == "fizz":
            count += 1
    return count

サンプル :

>>> fizz_count(['test','fizz','buzz'])
1

for i in x:list のすべての要素を反復処理しますxここで詳細を読むことをお勧めします。

于 2013-05-16T15:47:46.993 に答える
0

タイプミスに違いありません。関数名を繰り返し処理しようとしています。

于 2013-05-16T15:48:38.237 に答える