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
相关产品推荐
相关产品推荐

