编程新手求助:99除以2的幂的唯一余数列表生成异常问题
问题分析与修复方案
原代码的核心问题
- 除数更新逻辑错误:原代码中
div = div * div会让除数序列变成2 → 4 → 16 → 256,直接跳过了8、32、64这些需要的2的幂,导致无法计算99与这些数的余数。 - 内层while循环冗余且错误:内层
while循环的条件中r的值不会改变,会导致死循环(如果满足条件),且逻辑上只需要判断一次是否添加余数,不需要循环。
修正后的代码
num = 99 div = 2 lst = [] while div < num: r = num % div if r != 0 and r not in lst: lst.append(r) div *= 2 # 正确生成下一个2的幂 print(lst)
代码说明
- 除数更新改为
div *= 2,确保遍历所有小于99的2的幂:2、4、8、16、32、64。 - 用
if判断替换内层while循环,避免死循环,同时保证只有非零且未出现过的余数才会被加入列表。
运行后输出为[1, 3, 35],符合预期。
内容的提问来源于stack exchange,提问作者zahed siddiqi
相关产品推荐
相关产品推荐

