4

所以我正在尝试使用 codecademy 学习 Python,但我被困住了。它要求我定义一个将列表作为参数的函数。这是我的代码:

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

这可能是我做错了什么愚蠢的事情,但它一直告诉我要确保该函数只接受一个参数“x”。def fizz_count(x):也不管用。我应该在这里做什么?

编辑:感谢大家的帮助,我知道我现在做错了什么。

4

6 回答 6

3

这里有一些问题:

  1. 您正在尝试迭代fizz_count. 但是fizz_count是你的功能。x是您传入的参数。所以它应该是for x in x:(但见#3)。
  2. 您正在接受一个参数*x成为所有参数的元组的原因*。如果你只传递一个,一个列表,那么列表是,列表的项目是,依此类推。更容易接受。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扩展以使用您传递的参数,因此您的函数期望像这样调用:

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 回答
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 回答
0

尝试这个:

def fizz_count(x):
    counter = 0
    for element in x:
        if element == "fizz":
            counter += 1
    return counter
于 2013-05-16T15:49:28.533 回答
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 回答