这不打印正确的斐波那契数列,即1 1 2 3 5 8 ...python 3中斐波那契数列的奇怪行为?
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a + b
请让我知道是否有更好的方法来做到这一点。
这不打印正确的斐波那契数列,即1 1 2 3 5 8 ...python 3中斐波那契数列的奇怪行为?
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a + b
请让我知道是否有更好的方法来做到这一点。
首先,第一个代码片段中存在缩进错误。最后两行应该缩进,以便在while
循环内执行。
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a+b
但是,这仍然不会产生正确的结果。让我们看看为什么这两个代码片段是不同的。
a, b = b, a + b
:这将分配给a
和b
向b
a + b
,用右手边的左侧前的评估。这意味着在查看要赋予新值的变量之前,Python将首先看到什么是b
和a + b
。这意味着a
的旧值将用于设置b = a + b
。你可以阅读更多关于这个here。
a = 1
b = 2
a, b = b, a + b # set a to 2, set b to 1 + 2
print(a) # 2
print(b) # 3
a = b; b = a + b
:这确实分配顺序,使得a
首先设置为b
,然后在分配计算中使用。
a = 1
b = 2
a = b # set a to 2
b = a + b # set b to 2 + 2
print(a) # 2
print(b) # 4
a=b
b = a+b
在第一个代码示例中相当于b = b * 2
。相反,你想要b += original_value(a)
。所以,你要么需要做的元组分配,作为第二个代码示例(a,b = b, a+b
)中,或使用一个临时变量:
temp = a
a = b
b += temp
以获得所需的价值变化。