Python质数判断代码异常排查:continue引发的循环停滞问题
排查质数判断Python代码的逻辑错误与continue语句解析
咱们直接揪出你代码里的核心问题——死循环,再一步步拆解原因和解决办法。
为什么代码会停滞(死循环)?
你的代码在else块里用了continue,这直接导致div = div + 1永远不会执行,div的值一直停在2,循环条件div <= Max_div永远成立(只要输入的数字大于4,Max_div至少是2),程序就卡在循环里没法推进。
先搞懂continue到底干嘛用
continue的作用是跳过当前循环迭代的剩余代码,直接进入下一次循环的条件判断。举个例子:如果循环体里遇到continue,那continue后面的所有代码这次迭代都不会跑,直接回到循环开头检查条件。
回到你的代码:
while div <= Max_div: if num % div == 0: break else: counter = counter + 1 print("before the flood",counter) continue # 这里直接跳过了后面的所有代码! # 下面这三行永远不会被执行 print("after the flood") print("div:/tMax_div",div,Max_div) div = div + 1
当数字不能被div整除时,进入else块,执行完continue后直接跳回循环开头,div根本没机会自增,永远是2,循环就卡死了。
为什么删除else块后能正常运行?
删除else块后,不管数字能不能被div整除,只要没触发break,都会执行到div = div + 1,div的值逐步增加,循环能正常推进,直到满足退出条件。
修正后的代码(保留核心逻辑,修复死循环)
我帮你调整了逻辑,去掉了没用的counter,把div的自增放到不会被跳过的位置,同时补充了特殊数字的判断(比如小于2的数不是质数):
num = int(input("Enter the number:")) # 处理特殊情况:小于2的数不是质数 if num <= 1: print("Not Prime") else: Max_div = int(num / 2) print("------------Max_div:", Max_div) div = 2 is_prime = True while div <= Max_div: if num % div == 0: is_prime = False break # 找到因数,直接退出循环 div += 1 # 没找到因数,div自增继续检查 print("Div out of loop", div) print("Prime" if is_prime else "Not Prime")
额外优化:更高效的质数判断
其实不需要循环到num/2,因为如果一个数num有大于它平方根的因数,那必然有一个对应的小于平方根的因数。循环到平方根就能减少一半以上的循环次数:
num = int(input("Enter the number:")) if num <= 1: print("Not Prime") elif num == 2: print("Prime") # 2是唯一的偶质数 else: Max_div = int(num**0.5) + 1 # 加1确保覆盖边界情况 div = 2 is_prime = True while div <= Max_div: if num % div == 0: is_prime = False break div += 1 print("Prime" if is_prime else "Not Prime")
内容的提问来源于stack exchange,提问作者Wasim
相关产品推荐
相关产品推荐

