这一直在杀我。使用以下代码打印Fib编号时,它会给出正确的输出:
a = 0
n = 1
while n < 55:
print(n)
a,n = n,a+n
但是当我改为:
a = 0
n = 1
while n < 55:
print(n)
a = n
n = a+n
输出完全不同。 我甚至通过pythontutor.com运行它来观察踩踏。
我缺少什么。
答案 0 :(得分:1)
在两个代码片段之间解释和分配变量值的方式有所不同。
如果是第一个片段,在将值分配给&#34; n&#34;时,不使用a的新值,而是使用上一次迭代中的a值。
但是,在第二个片段的情况下,&#34; a&#34;的值首先更新,然后用于第二个声明。
让我们举个例子:
对于n为1的第一次迭代,
First Code Snippet :在迭代结束时,a的值将为1,n的值也将为1.(对于n = a + n,a的值被视为0)
第二代码片段:在迭代结束时,a的值将为1,n的值将为2.(对于n = a + n,a的值被视为1 )
关于Python逗号运算符需要注意的关键点是,在实际赋值之前,首先计算赋值运算符右边的所有表达式,这会导致两者之间输出的差异。
答案 1 :(得分:0)
嗯,初始作业
old_a = a
a = n
n = old_a + n # saved a value (old_a) used
装置
n = old_a + n
请注意a + n == 2 * n
,而不是Resource Configurations
答案 2 :(得分:0)
让我们在第i次迭代时调用a_i
和n_i
a
和n
的值。
在第一个代码中,您将n_i+1
分配给值a_i + n_i
,而在第二个代码中,您将n_i+1
分配给值a_i+n_i+n_i
。
发生这种情况的原因是您在a
之前在第二个代码中分配n
,而这在第一个代码中同时发生。要解决此问题,请在临时变量中保存旧值n
或a
。
或者,只需要一点数学运算,就可以在不保存任何临时变量的情况下执行以下操作:
a = 0
n = 1
while n < 55:
print(n)
n = a+n
a = n-a
相当于:a_i+1 = n_i+1 - a_i = a_i + n_i - a_i = n_i
。