Python 斐波那契数列 - 不同的 while 循环

标签 python loops while-loop fibonacci

我对 Python 比较陌生,所以请原谅我的无知。

这两种用于生成 Fib 系列的 while 循环实现会产生截然不同的输出。

第一个返回 2 的幂级数,尽管我觉得它应该完全按照后者做的事情;返回预期的系列。

第二个 while 循环显然做了正确的事情。我猜测这与交换值时分配变量的方式有关。

是什么导致了这种差异?

感谢您的意见和帮助,

第一个 while 循环:

def fib(n):
x=0 
y=1
while y < n:
    print(y)
    x = y
    y = x + y

第二个 while 循环:

x,y=0,1
while y < 100:
    print(y)
    x,y = y,x+y

最佳答案

并行分配

x,y = y,x+y

这是一个并行作业。右侧的x仍然是旧的x,它还没有被设置为y。这是所需的行为,例如为了交换两个变量而不需要第三个变量:

>>> a = 1
>>> b = 2
>>> a, b = b, a
>>> a
2
>>> b
1

正如 @Alfe 所解释的,x, y = y, x + y 实际上是一个元组赋值:

(x, y) = (y, x + y)

右侧的元组在赋值之前就已完全定义。

连续分配

x = y
y = x + y

第二行右侧的x已被设置为上一行的y,所以第二行实际上是y = y + y.

如果您尝试以这种方式交换两个变量,您将获得相同的值两次:

>>> a = 1
>>> b = 2
>>> a = b
>>> b = a
>>> a
2
>>> b
2

您需要第三个变量:

>>> a = 1
>>> b = 2
>>> temp = b
>>> b = a
>>> a = temp
>>> a
2
>>> b
1

关于Python 斐波那契数列 - 不同的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908591/

相关文章:

ruby : Finding lowest free ID in an ID array

java - 谁能告诉我这里的试卷要求什么?

python - 如何将此模板列表与单词列表进行比较?

C++: 程序 "Not Responding"执行时

python - 如何快速将csv表导出到python字典?

python - 使用scrapy时出错

python - 将类变量重定向到类函数

javascript - 在 Javascript 中的 while 循环内创建暂停

java - 为什么在Java while循环中需要使用 "break"和 "continue"语句?

python - Python 中的 Selenium PhantomJS 自定义 header