所以我正在尝试使用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):
不起作用。我该怎么办?
编辑:感谢大家的帮助,我看到我现在做错了什么。
答案 0 :(得分:2)
这里有一些问题:
fizz_count
。但是fizz_count
是你的功能。 x
是你传入的参数。所以它应该是for x in x:
(但参见#3)。*x
的一个参数。 *
导致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")
事实上,这很简单,你几乎不需要为它编写函数!
答案 1 :(得分: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
答案 2 :(得分: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')
答案 3 :(得分: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:
将遍历列表x
的每个元素。建议您阅读更多here。
答案 4 :(得分:0)
一定是拼写错误。您正试图迭代函数名称。
答案 5 :(得分:0)
试试这个:
def fizz_count(x):
counter = 0
for element in x:
if element == "fizz":
counter += 1
return counter