关于Python中的斐波那契序列示例';s函数教程

关于Python中的斐波那契序列示例';s函数教程,python,fibonacci,Python,Fibonacci,这就是我们所拥有的: def fib(n): a、 b=0,1 而a

这就是我们所拥有的:

def fib(n):
a、 b=0,1
而a
这就是我所拥有的:

def fib(n):
    a = 0
    b = 1
    while a < n:
        print a
        a = b
        b = b+a
def fib(n):
a=0
b=1
而a
第一个在使用时返回正确的序列,而我的返回0、1、2、4、8、16、32


我目前正在学习编程(之前没有计算机科学教育),很明显问题在于我如何定义变量。用逗号分隔变量和用新行分隔变量之间有什么区别(假设这是问题所在)?

只有一个区别:

在第一种方法中,赋值
b=b+a
在修改
a
之前完成。这是因为,在完成任何赋值之前,RHS中的两个表达式都是先求值的

而在第二个赋值中,第二个赋值是在修改
a
之后完成的。这就是为什么你看到了错误的结果

因此,在您的代码中:

b = b + a
实际上是:

b = b + b

因为
a
已经分配了
b

的值,这是一个元组分配:

a, b = 0, 1
你也可以把它想象成

(a, b) = (0, 1)
使用值
0
1
创建临时元组,然后将其解压缩到变量
A
b

这也是一个元组赋值

a, b = b, a+b
同样,你可以把它看作是

(a, b) = (b, a+b)
临时元组是从
b
a+b
的值创建的,然后再更新它们。赋值仅在创建临时元组后发生

通过将其分解为单独的步骤,您正在更改代码的含义

让我们看看这里发生了什么

a, b = 0, 1        # a=0 , b=1
a, b = b, a+b      # a=1 , b=1
比照

a = 0              # a=0
b = 1              # a=0 , b=1
a = b              # a=1 , b=1
b = b+a            # a=1 , b=2 

很抱歉,这对我来说并不直观,但那是因为我仍在试图理解语法本身。看第一个例子,b=b+a是如何首先分配的?我试着在代码中交换a=b和b=b+a的位置,但对输出没有影响。编辑:虽然我知道我的顺序变量赋值顺序是错误的,但是我也按照这个顺序阅读了教程。因为它看起来像是首先被重新分配给我的。这正是我需要知道的(还不熟悉元组分配的原理)。非常感谢。
a = 0              # a=0
b = 1              # a=0 , b=1
a = b              # a=1 , b=1
b = b+a            # a=1 , b=2