Python斐波那契数列简单实现异常:重复输出2十次
你的斐波那契代码问题分析与修复
嘿,我来帮你搞定这个问题!你代码里的核心问题是没有在循环中更新n3的值,所以它一直停留在初始的2,自然会重复打印啦。让我一步步拆解问题,再给你修正方案:
问题出在哪?
先看你原来的代码片段:
n1 = 1 n2 = 1 n3 = n1 + n2 # 这里n3被赋值为2,之后就没再变过! for i in range(10): n1 + n2 # 这行只是做了加法,但没把结果存到n3里,等于白算 print(n3) # 所以每次打印的都是最初的2 n1 = n2 n2 = n3
你虽然在循环最后更新了n1和n2,但n3从来没被重新计算过——它的数值永远停留在第一次赋值的1+1=2,所以循环10次就会打印10个2。
修复后的代码
要正确生成斐波那契数列,每次循环都需要先计算新的项,再更新前两项的值。这里有两种简洁的写法:
写法1:保持你的变量命名逻辑
n1 = 1 n2 = 1 # 如果需要输出前10项,先打印初始的两个1 print(n1) print(n2) # 剩下8项用循环生成 for i in range(8): n3 = n1 + n2 # 每次循环都重新计算新的项 print(n3) # 更新前两项,为下一次循环做准备 n1 = n2 n2 = n3
写法2:用元组赋值简化代码(更Pythonic)
这种写法不用额外的n3变量,直接通过元组解包更新前两项,更简洁不易出错:
a, b = 1, 1 print(a) print(b) for _ in range(8): a, b = b, a + b # 一步完成更新:新的a是原来的b,新的b是原来的a+b print(b)
额外说明
如果你想从第三项开始输出10项(也就是不打印前两个1),只需要调整循环次数为10,并且去掉开头的两次打印即可:
a, b = 1, 1 for _ in range(10): a, b = b, a + b print(b)
内容的提问来源于stack exchange,提问作者TheKylieKappa
相关产品推荐
相关产品推荐

