# program to generate the Fibonacci sequence
a, b=0,1
while b<10:
Print b
a, b=b,a+b
# my intuitive substitute
a=0
b=1
while b<10
print b
a=b
b=a+b
上面的代码片段包含两个程序,一个来自Python文档,另一个来自直观的我,我认为它们都会产生类似的结果,但前者输出1 1 2 3 5 8,后者1 2 4 8。善良的撒玛利亚人善意解释为什么?
答案 0 :(得分:2)
本声明:
a, b=b,a+b
以及这些陈述:
a=b
b=a+b
不是一回事。前者在变量具有新值之前完成所有赋值。后者一次做一个。
因此,例如,从a = 0
和b = 1
开始,逐步执行逻辑:
a, b=b,a+b
# a was set to 1
# and b was set to 0 + 1
反过来:
a=b
# a was set to 1
b=a+b
# b was set to 1 + 1
答案 1 :(得分:0)
在您的示例中,当您执行b = a+b
时,您正在使用上一行中已修改的a
。在Python的示例中,vars是同时分配的。你的工作应该是:
a=0
b=1
while b<10:
print b
c=a
a=b
b=c+b