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

Python素数判断阶乘功能失效排查:素数求阶乘非素数求数位和

代码Bug定位与修复方案

核心问题根源

阶乘模块失效完全来自break语句的缩进错位,直接打乱了if-else的分支判断逻辑:

  • 原代码中break与判断素数因子的if (NUM % x) == 0语句为平级缩进,属于for循环的固定执行语句。只要进入for循环取第一个值(x=2),无论NUM能否被2整除,执行完if判断后都会立刻触发break强制退出for循环。
  • Python的for-else语法规则明确:只有当for循环完整运行、未被break中断时,才会触发else分支的阶乘计算逻辑。当前循环第一次执行就被打断,else分支永远无法触发,导致阶乘模块完全不工作。
  • 按照原有逻辑,只有找到NUM的可整除因子、确认是非素数、计算完数位和后,才需要触发break退出循环。原代码的break位置完全违背了这个设计。

修复调整点

将break语句移动到判断整除的if代码块内部,即完成数位和计算后再执行break退出循环,全程保留原有正常运行的数位和计算逻辑。

修复后完整可运行代码

NUM = int(input("Enter a number "))
if NUM > 1:
    for x in range(2, NUM):
        if (NUM % x) == 0:  
            temp = NUM
            sod = 0
            while temp > 0:
                remainder = temp % 10  
                sod += remainder
                temp = temp//10
            print(sod)
            break
    else:
        factorial = 1
        for I in range(1, NUM + 1, 1):
            factorial *= I
        print(factorial)        
else:
    temp = NUM
    sod = 0
    while temp > 0:
        remainder = temp % 10  
        sod += remainder
        temp = temp//10
    print(sod)

修复后逻辑验证

  • 输入非素数(如10):遍历到x=2时匹配整除条件,计算数位和1+0=1并打印,触发break退出循环,不会进入阶乘分支
  • 输入素数(如7):遍历2到6的所有整数,未找到可整除的因子,循环正常结束,触发else分支计算7的阶乘并打印
  • 输入小于等于1的整数(如0、-3):直接进入最外层else分支计算数位和,功能与原有正常版本保持一致

内容的提问来源于stack exchange,提问作者Jackson Tai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 03:54:03