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

Python新手求助:Collatz序列程序输出重复两次问题排查

问题原因

你的代码里每个数值打印两次的核心原因是在内部while循环中重复调用了collatz()函数:

  • collatz()函数内部自带print语句,每次调用都会输出计算后的数值。
  • 你先执行了collatz()(第一次打印),接着又执行number = collatz()(第二次调用函数,再次打印),导致同一个结果被输出两次。
修复方案

方案1:去掉多余的函数调用

直接删除单独的collatz()调用,只保留赋值语句,这样每次循环只调用一次函数,只打印一次结果:

def collatz():
    if number % 2 == 0:
        print(number // 2)
        return number // 2
    else:
        print(number * 3 + 1)
        return number * 3 + 1

number = 5
print("hi pick a number")
while number != 1:
    try:
        number = int(input())
        while number != 1:
            number = collatz()  # 只保留这一行,去掉单独的collatz()调用
    except ValueError:
        print("you should pick a number!")

方案2:优化函数(推荐)

把number作为参数传给collatz()函数,避免依赖全局变量,让函数逻辑更清晰:

def collatz(n):
    if n % 2 == 0:
        result = n // 2
    else:
        result = n * 3 + 1
    print(result)
    return result

print("hi pick a number")
while True:
    try:
        number = int(input())
        while number != 1:
            number = collatz(number)
        break  # 序列结束后退出外层循环
    except ValueError:
        print("you should pick a number!")

修复后输出示例

输入5后,输出会变成:

hi pick a number
5
16
8
4
2
1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:34:27