【问题标题】:Count Returns 1 instead of 3计数返回 1 而不是 3
【发布时间】:2018-10-30 19:23:30
【问题描述】:

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

【问题讨论】:

  • 你能确认你的缩进是正确的吗?好像不是这样
  • return count 似乎在循环内部...
  • 这是我创建的缩进。这就是问题所在?
  • @RaulGonzales:这绝对不是你的确切缩进;如果def 的缩进与以下行相同,您将得到SyntaxError。如果除第一行之外的所有行都应该缩进一个额外的级别,但您不知道如何自己修复它,请告诉我们。
  • 感谢大家的努力,但您可以清楚地看出我在 Python 方面完全是新手,为什么投反对票?

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


【解决方案1】:

您的缩进不正确。您的 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 只有在您遍历传递列表 integers 中的所有数字并由您的逻辑(您的 if 语句)评估后才应返回。

更简单的解决方案:

integers = [2,3,4,5,6,7]

count = sum(1 for i in integers if i%2==0)

产量:

3

【讨论】:

    【解决方案2】:

    缩进很重要。您当前的代码返回结果为 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])
    

    【讨论】:

      【解决方案3】:

      你的缩进确实不太对。 考虑完全避免循环,因为更少的代码意味着更少的错误。 一种选择是使用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 表达式,但为了清楚起见,我这样写了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 2013-10-13
        相关资源
        最近更新 更多