【发布时间】:2020-07-14 13:05:51
【问题描述】:
[抱歉,我对编程很陌生。]
这是针对项目欧拉问题#2。目标是计算所有不超过 400 万的偶数斐波那契数的总和。对于不熟悉斐波那契数的人来说,斐波那契数只是一个数字,它是序列中前两个数字的总和。例如,前几个斐波那契数是 1,2,3,5,8,13,21,34 ...
下面是我的代码,从一些变量开始,然后是我的 while 循环,最后是我的 for 循环。
n = 0
n2 = 1
fibsum = 0
fibrange = range(1,4000001)
while (n2 <= 4000000):
n2 = n2 + n
n = n2 - n
if n2 % 2 == 0:
fibsum += n2
print (fibsum)
# for n2 in fibrange:
# n2 = n2 + n
# n = n2 - n
# if n2 % 2 == 0:
# fibsum += n2
# print(fibsum)
正如我所说,我的 while 循环就像一个魅力,但是当我运行 for 循环时,fibsum 的输出为 0。所以值根本没有改变。
我尝试用range (1, 4000001) 代替fibrange。我真的不知道还能尝试什么。这就像我的第 4 个或第 5 个程序。
【问题讨论】:
-
简单的答案是“因为
for循环不是while循环”。你熟悉它们的区别吗?是什么让您期望提供相同的行为?简而言之,for循环并不关心你是否修改了它的迭代变量——可迭代 (fibrange) 决定下一步,而不是循环体。 -
ericlippert.com/2014/03/05/how-to-debug-small-programs - 使用
print或调试器来分析你的 for 循环 - 特别是 n 和 n2 是如何发展的。 -
for n2 in fibrange每次都为n2分配新值,这不是您想要的。 -
@MisterMiyagi 几天前我才意识到循环,我会阅读更多内容。感谢您的链接。这是否意味着循环体中 n2 和 n 的表达式根本没有做任何事情?编辑:while 循环会比 for 循环更适合这样的事情吗?
标签: python-3.x for-loop while-loop