You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python质数判断函数异常:2返回None、9被误判为质数

修复质数判断函数的两个异常问题

我一眼就看出问题所在啦——你的代码缩进大概率出了错!结合你的测试输出,咱们来逐个分析:

问题1:数字2返回None

当n=2时,range(2, n)等价于range(2,2),这是一个空迭代器,循环体根本不会执行。如果你的return True被错误缩进在了for循环内部,那函数就没有机会执行到返回语句,Python会默认返回None,这就是2返回None的原因。

问题2:数字9被错误判定为质数

同样是缩进错误导致的:如果return True写在for循环里,当检测第一个因数d=2时,9%2=1,不满足n%d ==0的条件,就会直接执行return True,跳过了后续d=3的检测——而3正是9的因数,自然就错误地把9判定为质数了。

修复后的正确代码

首先把return True的缩进调整到for循环外面,再加上边界值的优化处理,让函数更健壮:

def is_prime_v1(n):
    """ Return 'True' if 'n' is a prime number. False otherwise. """
    if n <= 1:
        return False  # 小于等于1的数不是质数
    if n == 2:
        return True   # 2是唯一的偶质数
    if n % 2 == 0:
        return False  # 大于2的偶数都不是质数
    # 优化循环范围:只检查到sqrt(n),且只遍历奇数
    max_divisor = int(n**0.5) + 1
    for d in range(3, max_divisor, 2):
        if n % d == 0:
            return False
    return True

# ===== Test Function =====
for n in range(1, 21):
    print(n, is_prime_v1(n))

正确的测试输出

运行上面的代码,输出会完全符合预期:

1 False
2 True
3 True
4 False
5 True
6 False
7 True
8 False
9 False
10 False
11 True
12 False
13 True
14 False
15 False
16 False
17 True
18 False
19 True
20 False

这样不仅解决了你遇到的两个问题,还优化了算法的效率,避免不必要的遍历~

内容的提问来源于stack exchange,提问作者Rafael Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:51:17