Python 斐波那契数列 - 不同的 while 循环
Python Fibonacci series - different while loops
我对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
编辑后的答案:
没有概率。按照第一个循环的顺序,x=0, y=1
。循环中的第一行使 x = y = 1
。
所以现在y=1
.
然后,您的下一行创建 y=x+y
。
这意味着 y=1+1=2
。现在 x=1
和 y=2
.
下一次迭代:
x = y = 2
所以x = 2
然后:
y= 2 + 2 = 4
如前所述,您的第二个循环是并行分配。所以遵循以 x=0
和 y=1
:
开头的逻辑
x,y=y,x+y
原因:
x=1 and y= 0+1 = 1 simultaneously
所以现在 x=1
和 y=1
。然后进行下一次迭代:
x=1 and y= 1+1=2 simultaneously
所以现在 x=1
和 y=2
。我的计算机科学教授 class 告诉我,在纸上逐行跟踪代码有助于理解计算机遵循的过程。我还发现帮助培养阅读代码的能力也很好。希望这对您有所帮助。
我对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
编辑后的答案:
没有概率。按照第一个循环的顺序,x=0, y=1
。循环中的第一行使 x = y = 1
。
所以现在y=1
.
然后,您的下一行创建 y=x+y
。
这意味着 y=1+1=2
。现在 x=1
和 y=2
.
下一次迭代:
x = y = 2
所以x = 2
然后:
y= 2 + 2 = 4
如前所述,您的第二个循环是并行分配。所以遵循以 x=0
和 y=1
:
x,y=y,x+y
原因:
x=1 and y= 0+1 = 1 simultaneously
所以现在 x=1
和 y=1
。然后进行下一次迭代:
x=1 and y= 1+1=2 simultaneously
所以现在 x=1
和 y=2
。我的计算机科学教授 class 告诉我,在纸上逐行跟踪代码有助于理解计算机遵循的过程。我还发现帮助培养阅读代码的能力也很好。希望这对您有所帮助。