Python质数判断程序问题求助:代码逻辑错误导致结果异常
问题分析与修正
你的代码存在三个核心问题:
break语句会直接终止循环,导致后面的quit()代码永远不会执行——哪怕找到能整除n的i,程序也不会输出“非质数”的结果,直接跳到最后的打印语句。quit()不是用来输出内容的函数,它的作用是终止程序,你传入的字符串不会被打印出来。- 循环结束后没有区分“找到因数跳出”和“遍历完所有数未找到因数”两种情况,导致无论输入什么都会执行最后的“是质数”打印。
修正方案一:找到因数立即输出并终止程序
n = int(input("Enter a number: ")) for i in range(2, n): if n % i == 0: print(f"{n} is not a prime number") exit() # 终止程序,避免执行后续代码 print(f"{n} is a prime number")
修正方案二:用标记变量判断状态(更易扩展)
n = int(input("Enter a number: ")) is_prime = True for i in range(2, n): if n % i == 0: is_prime = False break # 找到因数后无需继续循环 print(f"{n} is {'a prime number' if is_prime else 'not a prime number'}")
额外优化(可选)
判断质数时,不需要遍历到n-1,只需要遍历到n的平方根即可——如果n有大于平方根的因数,必然对应一个小于平方根的因数。可以把循环范围改成:
range(2, int(n**0.5) + 1)
对于2-101的数字来说,效率提升不明显,但养成这个习惯对大数判断很有用。
内容的提问来源于stack exchange,提问作者Chris Lundin
相关产品推荐
相关产品推荐

