我刚刚编写了这些代码,但输出结果不同。第二个代码的输出是我所期望的,但第一个代码的输出不正确。但为什么呢?
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
输出是;当n = 5时
0
1
1
2
3
5
第二个代码是正确的,但是, x,y = y,x + y和 x = y,y = x + y 它们看起来一样,但输出却不同?
答案 0 :(得分:0)
它们给出不同的输出,因为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
我希望这有助于:)
答案 1 :(得分:0)
不同之处在于您将更新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
答案 2 :(得分:0)
如果不使用元组,则必须先将x的值分配给新变量z,然后再使用y值对其进行更新,并使用此新变量来计算y的值。 代码来自另一个问题,但是输出是斐波那契数列。
x = 0
y = 1
print(x)
while y < 50:
print(y)
z = x
x = y
y = z+y