You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:32:43