繁体   English   中英

While循环Python斐波那契

[英]While-loop Python Fibonacci

我是python新手,对其他代码的经验真的很差。 对于大多数人来说,这是一个愚蠢的问题,但我应该从某个地方开始。

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

我不明白为什么要输入a, b = b, a+b我看到并理解了结果,我可以得出基本算法的结论,但是我不了解这条线正在发生的事情以及为什么我们需要它。

非常感谢

该行按以下顺序执行:

  1. 创建新的元组,第一个元素等于b ,第二个元素等于a + b
  2. 元组已解压缩,第一个元素存储在a ,第二个元素存储在b

棘手的部分是首先执行正确的部分,并且您无需使用临时变量。

之所以需要它,是因为如果用新值更新a ,则将无法计算b的新值。 在计算新值时,您总是可以使用临时变量来保留旧值,但这是避免这种情况的一种非常简洁的方法。

这称为序列拆包。

在您的陈述中:

a, b = b, a + b

在右侧b, a + b创建一个tuple

>>> 8, 5 + 8
(8, 13)

然后,将其分配给左侧,它也是元组a, b

>>> a, b = 8, 13
>>> a
8
>>> b
13

请参阅有关元组和序列的文档的最后一段:

语句t = 12345, 54321, 'hello!' 是元组打包的示例:值12345、54321和'hello!' 被打包成一个元组。 反向操作也是可能的:

>>> x, y, z = t

这被适当地称为序列解压缩,适用于右侧的任何序列。 序列解压缩要求左侧的变量列表具有与序列长度相同数量的元素。 注意,多重分配实际上只是元组打包和序列拆包的组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM