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
相关产品推荐
相关产品推荐

