关于Python函数教程中的Fibonacci Sequence示例

时间:2013-03-20 05:18:34

标签: python fibonacci

这是they所拥有的:

def fib(n):
    a, b = 0, 1
    while a < n:
        print a,
        a, b = b, a+b

这就是我所拥有的:

def fib(n):
    a = 0
    b = 1
    while a < n:
        print a
        a = b
        b = b+a

第一个在使用时返回正确的序列,而我的收益为0,1,2,4,8,16,32 ...

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

2 个答案:

答案 0 :(得分:8)

这是一个元组任务:

a, b = 0, 1

您也可以将其视为

(a, b) = (0, 1)

使用值01创建临时元组,然后将其解压缩到变量ab

这也是一个元组赋值

a, b = b, a+b

同样,您可以将其视为

(a, b) = (b, a+b)

临时元组是根据ba+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 

答案 1 :(得分:5)

只有一个区别:

在第一个中,作业b = b+a在修改a之前完成。这是因为,在完成任何赋值之前,首先评估RHS中的表达式。

而在第二个中,第二个分配是在a修改后完成的。这就是你看到错误结果的原因。

所以,在你的代码中:

b = b + a

实际上是:

b = b + b

因为已为a分配了值b