计数返回1而不是3

时间:2018-10-30 19:23:30

标签: python python-3.x for-loop

我有一个非常基本的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循环似乎还可以,所以我不明白还有什么问题。

3 个答案:

答案 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表达式,但是为了清楚起见,我以此方式编写了它。