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

实现Collatz序列时函数陷入重复两数循环的问题求助

Collatz序列循环问题排查指引

我正在学习《Python编程快速上手:让繁琐工作自动化》一书,需实现Collatz序列:collatz()函数负责计算逻辑,get_collatz()函数获取用户输入并调用collatz(),直到返回值为1。但当前代码运行时函数陷入重复两个数的循环,作为编程新手,希望得到排查方向指引而非直接答案。

以下是我的代码:

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

def get_collatz():
    number = int(input('Put in a number please!: '))
    while number != 1:
        print(number)
        collatz(number)

get_collatz()

排查方向指引

  • 检查get_collatz()中while循环里的number变量:每次调用collatz()后,有没有把函数返回的新值赋值给number?如果没有,循环里的number会不会一直停留在某个固定值?
  • 梳理函数参数的作用域:collatz()里的number是函数的局部参数,修改这个局部变量会不会影响get_collatz()里的number?
  • 手动模拟代码执行流程:选一个测试数(比如输入3),一步步写出每次循环时number的取值、collatz()的返回值,看看哪里出现了值没有更新的情况?
  • 观察循环的执行逻辑:while循环的终止条件是number == 1,只有当number被正确更新为collatz()的返回值时,才有可能逐步趋近于1,否则会一直循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:30:57