我是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。
答案 0 :(得分:0)
您的代码无法正常工作,因为您在评估a
之前更改了b
的值。在斐波那契数列中,您需要a和b的先前值。您可以如上所述使用list
,也可以引入另一个变量来存储值。
while True:
temp = a + b
if temp >100:
break
print(temp)
a = b
b = temp
作为参考,这是使用list
的简单实现:
lst = [0, 1]
while True:
temp = lst[-1]+lst[-2]
if temp>100:
break
lst.append(temp)
print(lst)
答案 1 :(得分:0)
这是因为诸如Python之类的编程语言以及许多其他语言会按照编写顺序执行您编写的语句。
这意味着到您执行b = a + b
时,a
的值已在上一行中更改。
解决此问题的一种简单方法是使用第三个变量临时存储结果。
a = 0
b = 1
c = 1
while c < 100:
print(c)
c = a + b
a = b
b = c
答案 2 :(得分:0)
您犯了一个小错误。
执行[Setup]
OutputDir={#GetEnv('USERPROFILE')}\Desktop
时,您正在更改a = b
的值。此后,当您执行a
时,它实际上等效于b=a+b
=> b = b+b
。
为避免这种情况,请使用临时变量b=2b
并将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
,通过存储{{1}的先前值,我们在上面做了类似的事情}在b
答案 3 :(得分:0)
运算符“逗号”(,
)用于创建元组,并且允许省略元组周围的括号。表达式a, b = b, a+b
实际上是一个元组到另一个的赋值:
(a, b) = (b, a + b)
该语句是通过评估右侧(b, a + b)
的元组构造函数来执行的。此时,将创建一个新的匿名元组(我们将其称为c
),并且不再需要a
和b
的原始值。然后将元组按元素方式分配给左侧的元组。 a
的新值变为c[0]
(即以前的b
),而b
的新值变为c[1]
(即以前的{{1 }}。