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

Python考拉兹序列计算代码嵌套while循环运行异常问题

考拉兹(Collatz)序列计算代码的问题修复

你的代码存在三个核心问题,导致内层循环仅执行一次、外层循环无法正常迭代:

  • 缩进错误:外层while start < 1000000循环的后续逻辑(更新最大序列长度、推进start、重置seq)没有缩进,这些代码只会在第一次内层循环结束后执行一次,外层循环根本不会继续迭代。
  • 未重置num变量:第一次计算完start=13的序列后,num已经变为1,后续外层循环迭代时,num没有被重新赋值为当前的start,内层循环直接跳过。
  • 变量big未初始化:如果初始start的序列长度不是最大的,后续赋值会触发未定义变量错误,需要提前初始化。

修正后的代码

seq = 0
largest = 0
big = 1  # 初始化变量,避免未定义错误
start = 13

while start < 1000000:
    num = start  # 每次外层循环重置num为当前起始数
    current_seq = 0  # 用单独变量记录当前序列长度,避免全局变量混乱
    while num != 1:
        if num % 2 == 0:
            num /= 2
        else:
            num = 3 * num + 1
        current_seq += 1
        # 可选:打开下方注释打印每一步计算过程
        # print(f"{current_seq} {num}")
    
    # 更新最长序列记录
    if current_seq > largest:
        largest = current_seq
        big = start
    start += 1

print(f"{largest} {big} {largest}")

关键修改说明

  1. 调整外层循环后续逻辑的缩进,确保每次内层循环结束后都能执行更新操作,同时推进start的值。
  2. 每次外层循环开始时将num重新赋值为当前start,保证每个起始数都能重新计算完整的考拉兹序列。
  3. 用current_seq单独记录当前起始数的序列长度,避免全局seq变量的状态混乱,逻辑更清晰。
  4. 提前初始化big变量,防止出现未定义错误。

运行修正后的代码,就能正确遍历13到999999的所有数,计算每个数的考拉兹序列长度,并找出最长序列对应的起始数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:32:39