实现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
相关产品推荐
相关产品推荐

