Python使用while循环与if语句迭代时异常输出问题求解
问题原因
- 核心错误是
while循环的终止条件逻辑不符合需求:你设置的(x // 2) != 1判定规则,会在当前值除以2的整数商为1时直接终止迭代,而考拉兹序列要求迭代到当前值为1时才停止。 - 以初始值3为例:x=3时
3//2=1,直接不进入循环,最后只追加3//2=1,就得到了错误结果[3,1]。初始值6迭代到x=3时也会触发相同的终止逻辑,得到[6,3,1]。 - 额外的冗余逻辑:循环结束后追加
x//2的操作也不符合规则,正确逻辑下迭代到x=1时就可以终止,不需要额外计算商。
修正后代码
import pandas as pd d ={} for i in range(1,10): x = i l = [x] # 终止条件改为当前值不等于1 while x != 1: if x % 2 == 0: x = x // 2 else: x = 3 * x + 1 l.append(x) d[i] = l df = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in d.items()]))
验证结果
运行修正后代码,3的输出为[3, 10, 5, 16, 8, 4, 2, 1],6的输出为[6, 3, 10, 5, 16, 8, 4, 2, 1],完全符合预期。
内容的提问来源于stack exchange,提问作者Srinivas
相关产品推荐
相关产品推荐

