作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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/
我是一名优秀的程序员,十分优秀!