我有一个非常基本的Python函数,该代码似乎还可以,但是它返回的是1而不是3。所有功能只是在列表中查找偶数。
def even_count(integers):
count = 0
for number in integers:
if number%2 == 0:
count = count + 1
return count
print(even_count([2,3,4,5,6,7]))
我已经将count变量初始化为0,并且for循环似乎还可以,所以我不明白还有什么问题。
答案 0 :(得分:2)
您的缩进不正确。您的return
语句是在for循环的第一次迭代中触发的,因此您只需执行一次迭代即可退出函数。
您的解决方案是使用适当的缩进:
def even_count(integers):
count = 0
for number in integers:
if number%2 == 0:
count = count + 1
return count
print(even_count([2,3,4,5,6,7]))
收益:
3
进一步的解释:
使用def my_function(*args)
定义函数时,需要缩进该函数定义之后要包含在函数中的所有行。在这种情况下,您正在从函数中返回一个值,并且仅当您遍历已通过列表count
中的所有数字并由逻辑求值(您的{{ 1}}语句。
更简单的解决方案:
integers
收益:
if
答案 1 :(得分:0)
缩进非常重要。您当前的代码返回结果为1
def even_count(integers):
count = 0
for number in integers:
if number%2 == 0:
count = count + 1
return count # inside for loop
print(even_count([2,3,4,5,6,7]))
缩进正确
def even_count(integers):
count = 0
for number in integers:
if number%2 == 0:
count = count + 1
return count # outside for loop
print(even_count([2,3,4,5,6,7])) #returns 3
如果需要一根衬纸
sum([1 for i in [2,3,4,5,6,7] if i%2==0])
答案 2 :(得分:0)
您的缩进确实不太正确。 考虑完全避免循环,因为更少的代码意味着更少的错误。 一种选择是使用functools.reduce:
import functools
def even_count(integers):
f = lambda acc, elem: acc + (0 if elem%2 else 1)
return functools.reduce(f, integers, 0)
print(even_count([2,3,4,5,6,7]))
您显然也可以内联lambda表达式,但是为了清楚起见,我以此方式编写了它。