【问题标题】:Why isn't the function checking till the last number? [duplicate]为什么函数不检查到最后一个数字? [复制]
【发布时间】:2026-02-07 19:30:02
【问题描述】:
def evenchecker(lst):
    for number in lst:
        return number%2==0
    else:
        pass

我正在尝试创建一个函数来检查列表中的偶数或任何可迭代的项目。当我将第一个数字保持为偶数时,它可以工作,但是当我将第一个数字保持为奇数时,它会分崩离析,它只会返回 false,并且不会为进一步的偶数报告 true。

有人可以解释一下为什么会发生这种情况,我是编程的绝对初学者,并从 Udemy 课程中学习。我确实找到了解决方法,

def evenchecker(lst):
    for number in lst:
        if number%2==0:
            return "The list has an even number"
    else:
        pass

这会一直检查到最后一个数字。

【问题讨论】:

  • 您如何得出您声称的事实?您可能没有正确检查代码,但我们无法仅从您提出的声明中判断您做错了什么。
  • @tripleee 当我为第一个函数写 evenchecker([1,2]) 时它说 false,当它应该说 even 因为列表中有一个偶数但是当我做 evenchecker([ 2,1])它说 True 因为第一个元素是偶数。对于我写的第二个函数,它可以检查列表中的任何数字,它不会只停留在第一个数字。
  • 你知道 return immediately 会停止函数,因此也会停止任何外部结构,例如循环?
  • 现在明白了,谢谢@MisterMiyagi
  • 我建议您返回并查看有关 if ... elsefor 的基础知识。

标签: python loops for-loop


【解决方案1】:

您的第一个循环立即返回。它不会查看列表的任何其他部分。你的第二个例子做得很好。

    else:
        pass

零件绝对没用。删除它们。

请注意,您可以在一行中执行该操作:

def evenchecker(lst):
    return any(k % 2 == 0 for k in lst)

【讨论】:

  • 如果输入包含0,如图所示的代码将给出不同的结果。
  • 不错的收获。我调整了它。
  • 使用True而不是1可能更直观,即使bool(value)为True的任何值都足够了。
  • 也许这是个人喜好。但在我看来,如果你的意思是True,那么请使用True
  • @holdenweb 对于“直观”,我会选择any(k % 2 == 0 for k in lst),我认为这是通常的风格。虽然速度较慢。
【解决方案2】:

您必须区分函数的结果是什么以及如何到达那里。您想要知道列表是否包含偶数。这意味着无论哪种情况,您都必须遍历列表中的所有个数字。

for number in lst:
       return number%2==0

由于return 立即返回结果,该函数只测试列表的第一个元素是偶数还是奇数。如果第一个元素是偶数,则返回 true。

但是原来的代码(稍作修改)

for number in lst:
        if number%2==0:
            return true;
return false;

这会检查列表中的每个元素的数字是否为偶数(% 是模运算符),然后才返回。所以“如果”在这里非常重要。

【讨论】: