Python while循环意外终止求助:寻找三位数乘积最大回文数
问题原因分析
你的代码陷入了死循环,并非真的终止。问题出在分支逻辑的顺序上:当找到回文数时,程序只会更新ans,但没有推进循环的进度(也就是没有递增y或x),导致后续循环永远停在同一个x=101、y=101的组合上。
具体流程是这样的:
- 当
x=101、y=101时,乘积10201是回文数,程序进入if分支,给ans赋值。 - 下一次循环时,
x和y都没有变化,乘积还是10201,依然满足回文条件,再次进入if分支。 - 这个过程无限重复,
y永远不会递增到102,x也永远不会继续增加,看起来像是程序“终止”,实际是卡在了死循环里。
修复方案
你需要调整分支逻辑,确保不管是否找到回文数,都能推进循环的遍历进度。同时,还要修正ans的更新逻辑,保证只记录最大的回文数(否则后面找到的小回文数会覆盖之前的大值)。
修复后的代码示例:
x = 100 y = 100 ans = 0 # 初始化最大回文数为0 while x != 1000: test = x * y # 只有当找到更大的回文数时才更新ans if str(test)[::-1] == str(test) and test > ans: ans = test # 不管是否找到回文,都推进循环进度 if y < 999: # 注意这里是999,因为y是三位数,最大到999 y += 1 else: x += 1 y = 100 print(x) print(ans)
另外,如果你想提高效率,可以从大到小遍历x和y(比如从999开始递减),一旦找到回文数,就可以提前终止对应分支的循环,不用遍历所有组合。
内容的提问来源于stack exchange,提问作者Kalib
相关产品推荐
相关产品推荐

