如何使用Python for循环判断数字是否为质数及代码排错
代码错误原因分析
- 核心逻辑漏洞出在
prime标志位的赋值规则:只要存在某一个除数i无法整除目标数,就会直接把prime设为True。就算后续循环中找到了可整除的因数、提前终止循环,prime已经为True的状态不会被修改,最终就会触发末尾的“是质数”打印逻辑,导致非质数同时输出两条矛盾结果。比如输入15时,第一次循环i=2,15%2≠0,prime就被设为True,后续i=3找到因数break后,prime仍为True,就会出现错误输出。 - 额外存在边界值遗漏问题:未处理数值为1、2的特殊场景,1不是质数,2是最小的质数,现有代码对这两个输入的判断结果都会出错。
修正后完整代码
# 接收输入并校验合法性 num = int(input("请输入要检测的正整数:")) while num < 0: print("输入不合法,请重新输入") num = int(input("请输入要检测的正整数:")) # 处理小于2的边界情况 if num < 2: print(f"{num} 不是质数") else: is_prime = True # 初始默认是质数,找到因数后再推翻判定 for i in range(2, num): if num % i == 0: # 找到因数,判定为非质数 print(f"{i} 是 {num} 的因数,终止检测") print("") print(f"{num} 不是质数") is_prime = False break else: print(f"{i} 不能整除 {num},继续检测") # 完整遍历完所有除数都没找到因数,才判定为质数 if is_prime: print(f"{num} 是质数")
如果需要保留原英文交互提示,直接替换对应打印内容即可。
核心修正点
- 调整标志位初始状态:默认赋值为
True,先假设输入为质数,只有明确找到可整除的因数时才修改为False,避免中途错误赋值 - 补充边界值判断逻辑,覆盖数值小于2的特殊场景
- 优化判定逻辑:只有完整走完循环、没有找到任何因数的情况下,才输出为质数的结果,彻底解决非质数输出矛盾内容的问题
内容的提问来源于stack exchange,提问作者altalio
相关产品推荐
相关产品推荐

