为什么我的for循环不起作用,而while循环却起作用?

时间:2020-07-14 13:05:51

标签: python-3.x for-loop while-loop

[对不起,我是编程新手。]

这是针对项目欧拉问题#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个程序。

2 个答案:

答案 0 :(得分:1)

for函数中使用range循环,变量n2的值仅根据range函数而变化。您无法在{{1}中手动更改变量},同时使用for函数。

答案 1 :(得分:0)

forwhile是不同类型的循环。

while:在给定条件为TRUE时重复一个语句或一组语句。它在执行循环主体之前测试条件。

for:多次执行一系列语句,并简化管理循环变量的代码。

使用while,您可以执行以下操作:

a = 0
b = 1
target = 4000000
result = 0

while a <= target:
    if a % 2 == 0:
        result +=a
    a, b = b, a + b
print(result)

使用for

a, b = 0, 1
result = 0
target = 4000000
fib_sequence = 35  # -> the length of fibonacci sequence

for _ in range(fib_sequence):
    if a % 2 == 0:
        result +=a
    a, b = b, a + b
    if a >= target: break
print(result)