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

Python实现指定范围factorion查找时返回空列表的问题排查

factorion查找代码的Bug定位与修正

根本原因

代码存在循环变量被意外覆写的核心问题,完全破坏了判断逻辑:

  • for i in range(a, b)遍历到的i是当前需要校验的原始数值
  • 后续数位拆分逻辑直接对i本身执行取余、整除操作:反复将i除以10取整,直到i被修改为0才终止循环
  • 等各位阶乘和计算完成时,原本待对比的i早已被改成0,此时判断条件sum == i实际是在对比“阶乘和是否等于0”,自然永远不会匹配到1、2、145这类有效结果,最终返回空列表。

举个实际执行的例子:当遍历到i=145时,经过数位拆分流程,i会被逐步运算为145 →14 →1 →0,最终阶乘和计算为145,判断条件变成145 == 0,显然无法触发收集逻辑。

修正方法

数位拆分操作不要直接修改循环用的i,改用独立的临时变量承载拆分过程即可,修正后的核心代码片段:

def factorion(a, b):
    factorions = []
    for i in range(a, b):
        atom = []
        # 用临时变量保存当前数值,避免覆写循环变量
        current_num = i
        while current_num != 0:
            atom.append(current_num % 10)
            current_num = current_num // 10

        fact_sum = 0
        for digit in atom:
            fact_sum += factorial(digit)

        if fact_sum == i:
            factorions.append(i)
    return factorions

修正后运行factorion(1, 1000),就能正确返回预期结果[1, 2, 145]。

性能优化提示:0-9的阶乘结果是固定常量,可以提前预存为列表,省去循环中重复调用阶乘函数的开销,对大范围查找效率提升明显。

内容的提问来源于stack exchange,提问作者Shahryar Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 22:06:06