编写考拉兹(Collatz)猜想函数出现n未定义错误如何解决
错误原因
- 执行
while n != 1:时,变量n没有提前定义赋值,解释器找不到该变量因此抛出未定义错误 - 现有循环逻辑先计算下一步值再打印,会漏掉初始值的输出,和你预期的10开头的序列不符
- 末尾单独调用
collatz_step(3)没有实际作用,也不会把值传给循环里的n
修正方案
你想要输出10,5,16,8,4,2,1的序列,直接给循环的n设置初始值为10,调整打印顺序即可,修正后代码如下:
def collatz_step(n): if n % 2 == 0: return n // 2 else: return 3*n + 1 # 给n赋初始值10,对应你要的输出序列 n = 10 while n != 1: # 先打印当前n的值,避免漏掉初始值 print(n) n = collatz_step(n) # 循环结束后n等于1,还要打印最后一个1 print(n)
运行上述代码就会输出你预期的序列:10, 5, 16, 8, 4, 2, 1。如果需要测试其他初始值,修改n = 10这一行的数值即可。
内容的提问来源于stack exchange,提问作者Bath
相关产品推荐
相关产品推荐

