Python x,y=y,y+;x和x=y,y=x+;Y
我刚刚写了这些代码,但输出是不同的。第二个代码的输出是我所期望的正确的,但是第一个代码的输出是不正确的。但是为什么呢Python x,y=y,y+;x和x=y,y=x+;Y,python,variable-assignment,fibonacci,Python,Variable Assignment,Fibonacci,我刚刚写了这些代码,但输出是不同的。第二个代码的输出是我所期望的正确的,但是第一个代码的输出是不正确的。但是为什么呢 def fib(n): x = 0 y = 1 print x for i in range(n): x = y y = x+y print x return x 输出为;当n=5时 0 1 2 4 8 16 def fib(n): x,y = 0,1 print x
def fib(n):
x = 0
y = 1
print x
for i in range(n):
x = y
y = x+y
print x
return x
输出为;当n=5时
0
1
2
4
8
16
def fib(n):
x,y = 0,1
print x
for i in range(n):
x,y = y,x+y
print x
return x
0
1
1
2
3
5
输出为;当n=5时
0
1
2
4
8
16
def fib(n):
x,y = 0,1
print x
for i in range(n):
x,y = y,x+y
print x
return x
0
1
1
2
3
5
第二个代码是正确的,但是,
x,y=y,x+y
和
x=y,y=x+y
它们看起来一样,但输出不同为什么?它们给出不同的输出,因为当x=y,然后y=x+y时,您将x设置为y的值。然后取x,一旦它的值被更新,将其添加到y中以查找y变量。对于等式的y=y+x部分中的单行变量声明(x,y=y,y+x),它将使用先前的值x,而不是在该行中设置的值 如果你有:
x=0
y=1
然后您尝试了一行声明,它将如下所示:
x,y=1,0+1
x,y=y,x+y
我希望这有帮助:)不同之处在于,您将更新x,然后在第一个示例中使用它,而在第二个示例中您将直接使用它
x, y = 0, 1
x = y # after this line x will be 1
y = x + y # y = 1 + 1
第二个例子
x,y = 0, 1
x,y = y,x+y # x, y = (1, 0 + 1) the old value of x will be used
这是因为它将首先在右侧生成元组,然后,如果您不想使用元组,则案例中的元组
(1,1)
将分配给x
和y
,在用y值更新变量z之前,必须将x的值赋给新变量z,并使用此新变量计算y的值。
代码来自不同的问题,但输出是斐波那契序列
x = 0
y = 1
print(x)
while y < 50:
print(y)
z = x
x = y
y = z+y
x=0
y=1
打印(x)
y<50时:
打印(y)
z=x
x=y
y=z+y
在后一种情况下,y
不会在右侧更新,x
和y
都将基于y
的旧值进行分配。使用y
的旧值构建元组(y,x+y)
,然后将该元组解压为左侧的x
和y
的新值。在第一种情况下,x
在您尝试计算y
时被更新,因此您得到了错误的结果。与大多数语言一样,您需要为x
的旧值设置一个临时变量。在python中,我会使用第二个,它更优雅、更简洁:)