我是Python的新手,我正在尝试通过自学来学习Python。我试图使用while
循环来构建斐波纳契级数。下面是我的代码,它没有返回所需的结果。有人能解释这个问题吗?
a = 0
b = 1
while b<100:
print(b)
a = b
b = a + b
如果我们像a, b = b, a+b
一样同时定义a, b
,这将完美地工作。为什么会发生这种情况?我不明白,因为在这两种情况下,a和b的定义都是一样的。
发布于 2019-03-23 07:16:43
这是因为Python等编程语言会按照您编写的顺序执行您编写的语句。
这意味着在执行b = a + b
时,a
的值已经在前一行中发生了更改。
解决这个问题的一个简单方法是使用第三个变量临时存储结果。
a = 0
b = 1
c = 1
while c < 100:
print(c)
c = a + b
a = b
b = c
发布于 2019-03-23 07:09:22
您的代码无法正常工作,因为您在计算b
之前更改了a
的值。在斐波那契数列中,您需要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)
发布于 2019-03-23 07:20:46
你犯了一个小错误。
当您执行a = b
时,您将更改a
的值。在这之后,当你做b=a+b
时,它实际上等同于b = b+b
=> b=2b
。
要避免这种情况,请使用临时变量temp
并将a
的值存储在其中。然后使用a = b
更改a
的值。那就这样吧,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
,我们通过将a
的前一个值存储在temp
中进行了类似的操作
https://stackoverflow.com/questions/55311361
复制相似问题