Python编写Collatz函数时计算结果无法用于下轮计算导致无限循环求助
代码存在的两处直接导致死循环的逻辑错误
- 奇偶判断变量的计算位置错误:
x = number % 2被写在while循环外部,仅会计算用户最初输入值的奇偶属性,后续迭代中即便number发生变化,奇偶判断逻辑也不会同步更新,永远基于初始值的状态做分支判断。 - 循环内未更新迭代值:循环末尾的
number = number是自赋值操作,完全没有改变number的数值,导致循环永远卡在初始输入值,无法趋近于1的终止条件。
修正后的可运行代码
def collatz(): number = int(input('Enter the number: ')) # 循环执行直到数值变为1 while number != 1: # 每轮基于当前数值实时判断奇偶,无需单独存储x变量 if number % 2 == 0: # 偶数分支:将计算结果更新为下一轮的输入值 number = number // 2 else: # 奇数分支:将计算结果更新为下一轮的输入值 number = 3 * number + 1 # 打印当前迭代的计算结果 print(number) return number # 直接调用函数即可,不需要额外包一层print,避免重复打印返回值 collatz()
关键调整说明
- 取消了循环外单独存储奇偶结果的变量,把奇偶判断直接放到if分支条件里,每轮迭代都实时基于当前
number做判断,不会出现判断滞后的问题。 - 把两个分支的计算结果直接赋值给
number,让下一轮循环自动以上一步的计算结果作为输入,直到数值等于1时触发循环终止条件。 - 删除了原代码末尾多余的格式化打印:原写法会在函数跑完所有迭代后,额外打印一次函数的返回值(也就是最终的1),属于冗余输出。
内容的提问来源于stack exchange,提问作者Anderson Silva
相关产品推荐
相关产品推荐

