我是Python的新手,我正在尝试通过自学来学习Python。我试图使用while
循环构建斐波纳契系列。这是我的代码,它不会返回所需的结果。有谁能解释这个问题?
a = 0
b = 1
while b<100:
print(b)
a = b
b = a + b
如果我们像a, b
一样同时定义a, b = b, a+b
,这很有效。为什么会这样?我不明白,因为在这两种情况下我都以同样的方式定义a和b。
这是因为像Python这样的编程语言以及许多其他编程语言按照您编写它们的顺序执行您编写的语句。
这意味着,当您执行b = a + b
时,a
的值已在前一行中更改。
解决此问题的简单方法是使用第三个变量临时存储结果。
a = 0
b = 1
c = 1
while c < 100:
print(c)
c = a + b
a = b
b = c
你犯了一个小错误。
当你做a = b
时,你正在改变a
的值。在此之后,当你做b=a+b
时,它实际上相当于b = b+b
=> b=2b
。
要避免这种情况,请使用临时变量qazxsw poi并将qazxsw poi的值存储在其中。然后使用temp
更改a
的值。然后,a
。
以下是代码:
a = b
当你做a = a+b
时,a=0
b=1
while b<100:
print(b)
temp = a
a = b
b = temp+b
的前一个值用于计算新的a, b = b, a+b
,我们通过在a
中存储b
的先前值来做出类似的事情。
Python中的运算符“逗号”(a
)用于创建元组,并且允许省略围绕元组的括号。表达式temp
实际上是一个元组到另一个元组的赋值:
,
通过评估右侧a, b = b, a+b
上的元组构造函数来执行此语句。此时,创建了一个新的匿名元组(我们称之为(a, b) = (b, a + b)
),不再需要(b, a + b)
和c
的原始值。然后将元组元素分配给左侧的元组。 a
的新值变为b
(即前a
),c[0]
的新值变为b
(即前b
)。
您的代码无效,因为您在评估c[1]
之前更改了a+b
的值。在Fibonacci系列中,您需要a和b的先前值。您可以使用上面的a
,也可以引入另一个变量来存储值。
b
作为参考,这是一个使用list
的简单实现:
while True:
temp = a + b
if temp >100:
break
print(temp)
a = b
b = temp