在python 3中Fibonacci系列的奇怪行为?

时间:2016-08-22 02:48:14

标签: python python-2.7 python-3.x

这不会打印正确的Fibonacci系列,即1 1 2 3 5 8 ...

print ('Fibonacci series...')
 a,b = 0,1
 while b<50:
  print(b)
  a = b
  b = a + b

如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:4)

首先,第一个代码段中存在缩进错误。最后两行应缩进,以便在while循环中执行。

print ('Fibonacci series...')
a,b = 0,1
while b<50:
 print(b)
 a = b
 b = a+b

然而,这仍然不会产生正确的结果。让我们来看看为什么这两个代码片段不同。

  1. a, b = b, a + b:这会将a分配给bb分配给a + b,并在评估右侧之前左手边。这意味着在查看要为其分配新值的变量之前,Python将首先看到ba + 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
    
  2. 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

获得所需的值更改。