You need to enable JavaScript to run this app. Python编写质数查找函数时,逻辑判断输出异常,疑似OR被执行为AND
优惠活动
大模型
产品
解决方案
定价
更多

Python编写质数查找函数时,逻辑判断输出异常,疑似OR被执行为AND

问题本质说明

这不是Python的运行bug,也不是跨版本、跨编辑器的环境异常,核心是对逻辑运算符的执行规则和自身筛选意图存在认知偏差。

逻辑判断的实际运行拆解

你当前代码里的核心判断条件为:
if i % 2 != 0 or i % 3 != 0:
根据Python的逻辑运算规则:

  • 由or连接的表达式,仅当两个子条件同时为False时,整个表达式才会返回False(也就是不执行append操作,把当前数值筛掉)
  • 两个子条件同时为False的场景,等价于:
    • i % 2 != 0为False → i能被2整除
    • i % 3 != 0为False → i能被3整除
  • 两者同时满足的i,就是所有能被6整除的数,这和你实际运行看到的“只有6的倍数被剔除”的结果完全匹配。

筛选意图和逻辑修正

你最初的筛选目标是保留「既不是偶数、也不能被3整除」的数,这个场景下应该使用and连接两个判断条件,而非or,修正后的核心判断逻辑为:
if i % 2 != 0 and i % 3 != 0:

我们可以通过几个典型数值的判断结果对比,直观看到两个连接符的差异:

  • 数值2(能被2整除、不能被3整除):
    • 用or判断:False or True = True → 会被错误保留
    • 用and判断:False and True = False → 会被正确剔除
  • 数值9(不能被2整除、能被3整除):
    • 用or判断:True or False = True → 会被错误保留
    • 用and判断:True and False = False → 会被正确剔除
  • 数值6(既能被2整除、也能被3整除):
    • 无论用or还是and,判断结果都是False → 都会被剔除

关于你提到的“还原代码后异常”

逻辑判断的结果在所有Python 3.x版本、所有代码编辑器里的运行表现是完全一致的,不存在随机生效的bug,大概率是还原代码的过程中,手滑把原来的and连接符误写成了or。

最后补充:就算把连接符修正为and,这版代码也仅能完成最粗的初步筛选——筛完的结果里还会存在25、35、49这类能被5、7等质数整除的非质数,距离完成“找出所有小于等于给定值的质数”的作业目标,还需要补充更完善的整除判断逻辑。

内容的提问来源于stack exchange,提问作者Arturo Castillin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 10:06:00