【问题标题】:Why isn't my for loop working, but my while loop is?为什么我的 for 循环不工作,但我的 while 循环是?
【发布时间】: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 分配新值,这不是您想要的。
  • 这能回答你的问题吗? How does a Python for loop with iterable work?
  • @MisterMiyagi 几天前我才意识到循环,我会阅读更多内容。感谢您的链接。这是否意味着循环体中 n2 和 n 的表达式根本没有做任何事情?编辑:while 循环会比 for 循环更适合这样的事情吗?

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


【解决方案1】:

range函数中使用for循环,变量n2的值仅根据range函数变化。使用range函数时不能手动更改for循环中的变量。

【讨论】:

  • 所以 for 循环的 n2 = n2 + nn = n2 - n 部分不起作用?它只是在迭代范围函数时为 n2 分配一个新值?
  • 我已经尝试过了,但它不会注册,因为我是新手,我的声誉低于 15。
【解决方案2】:

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)

【讨论】:

  • 感谢您抽出宝贵时间!
猜你喜欢
  • 2018-05-23
  • 2012-11-07
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多