质数检查器代码异常求助:解析错误逻辑与正确实现差异
质数检查代码的逻辑错误分析与核心差异对比
错误代码的逻辑问题
先看你的错误代码:
def prime_checker(number): for i in range(2, number): if number % i == 0: print("It's not a prime number.") break else: print("It's a prime number") break n = int(input("Check this number: ")) prime_checker(number=n)
这里有三个致命逻辑问题:
- 输入2无输出:当
number=2时,range(2,2)是一个空序列,循环根本不会执行,自然没有任何打印语句触发。 - 87被误判为质数:87=3×29,循环第一次取
i=2,87除以2余1,直接进入else分支打印"是质数"然后break终止循环,完全没机会检查i=3这个能整除87的因数。 - 循环仅执行一次就终止:不管第一个
i是否能整除输入值,代码都会通过break直接终止循环,相当于只检查了i=2这一个数,完全没完成质数需要的"遍历所有小于自身的正整数检查是否有因数"的核心逻辑。
两段代码的核心差异
再看正确实现的代码:
def prime_checker(number): is_prime = True for i in range(2, number): if number % i == 0: is_prime = False if is_prime: print("It's a prime number.") else: print("It's not a prime number.") n = int(input("Check this number: ")) prime_checker(number=n)
核心差异体现在两个关键点:
- 判定逻辑的时机
- 错误代码:单次循环就直接输出结果并终止,完全没完成完整的因数检查。
- 正确代码:先预设结果为质数,遍历所有可能的因数过程中,只要找到能整除的数就标记为非质数,等整个循环遍历完成后,再根据标记统一输出结果,确保所有可能的因数都被检查过。
- 边界情况的处理
- 错误代码:处理不了
number=2的情况(循环不执行,无输出)。 - 正确代码:当
number=2时,循环不执行,is_prime保持初始的True,最后会正确输出"是质数"。
- 错误代码:处理不了
内容的提问来源于stack exchange,提问作者greg197
相关产品推荐
相关产品推荐

