这不会打印正确的Fibonacci系列,即1 1 2 3 5 8 ...
print ('Fibonacci series...')
a,b = 0,1
while b<50:
print(b)
a = b
b = a + b
如果有更好的方法,请告诉我。
答案 0 :(得分:4)
首先,第一个代码段中存在缩进错误。最后两行应缩进,以便在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
答案 1 :(得分:2)
a=b
b = a+b
第一个代码示例中的等同于b = b * 2
。相反,你想要b += original_value(a)
。因此,您需要执行元组赋值,如第二个代码示例(a,b = b, a+b
),或使用临时变量:
temp = a
a = b
b += temp
获得所需的值更改。