伙计们,我试着打印斐波纳契序列的前8个元素,只想理解一段代码。当在一行(n1,n2 = n2,n1+ n2 )中执行赋值操作时,代码工作得很好,但是当将相同的赋值操作分割成分隔行(n2 =n1+n2和n1=n2)时,我得到了不同的结果,并且代码不能以它应该的方式工作,请解释为什么?
def generate_fibonacci():
n1 = 0
n2 = 1
while True:
yield n1
n1,n2 = n2, n1+ n2 // this piece of code doesn't work properly when separating it
# n2 = n1 + n2
# n1 = n2
seq = generate_fibonacci()
for i in range(8):
print(next(seq))发布于 2022-01-19 17:08:02
如果在n2之前更改了n1,那么n1将更改为n2的新值,而不是原始值,因此它们具有相同的值。
同样,首先更改n1会使n2的值不正确。
如果您想拆分代码,那么有两个选项。第一种方法在任何情况下都有效,并将一个变量的原始值存储在另一个变量中:
temp = n2
n2 = n1 + n2
n1 = temp第二个选项只适用于这种情况,它是计算n1的be值,同时考虑到n2的值已经更改:
n2 = n1 + n2
n1 = n2 - n1发布于 2022-01-19 17:20:34
n2 = n1 + n2
n1 = n2使用此代码,n1和n2都以相同的值结束--原始n1和n2之和。
n1,n2 = n2, n1+ n2使用此代码,n1以n2的原始值结束,n2以原始n1和n2的总和结束。
发布于 2022-01-19 17:24:12
当您执行n1,n2 = n2,n1+n2时,Python在执行赋值之前将右边的值存储在临时内存中。因此,在改变n1+n2之前计算n1 (从而避免了分配过程中的干扰)。
如果在两行中执行此操作,则会丢失其中一个变量的原始值。但是,由于fibonacci序列的性质,您可以对其进行补偿并检索原始值:
def generate_fibonacci():
n1 = 0
n2 = 1
while True:
yield n1
n2=n1+n2 # n2 gets a new value
n1=n2-n1 # recover original value of n2https://stackoverflow.com/questions/70774799
复制相似问题