【问题标题】:Why does my Python script run forever?为什么我的 Python 脚本会永远运行?
【发布时间】:2015-09-27 04:11:29
【问题描述】:

代码如下:

numbers = [1, 2]
while new < 1000:
    new = 0
    x = int(len(numbers) - 1)
    new = numbers[x] + numbers[x-1]
    if new % 2 == 0:
        numbers.append(new)
    new += 1
print sum(numbers)

我做错了什么? 欢迎批评。谢谢你的时间。

【问题讨论】:

  • 这是当前代码吗?而不是永远运行你的脚本会在 new
  • 你想做什么?你想得到偶数斐波那契数的总和吗?
  • new 总是 3 所以总是小于 1000
  • 如果您不打算学习使用调试器,至少可以使用一些打印语句来查看您的程序在哪里没有按照您认为的那样做。 Running to SO 作为调试的第一步不会顺利进行。

标签: python math fibonacci


【解决方案1】:

这基本上是因为以下条件-

if new % 2 == 0:

加上循环开头的new=number[x] + number[x-1]这一行。

您计算的第一个斐波那契数是 3 ,由于上述条件,它实际上从未添加到 number ,因此在每个循环中您再次计算相同的 1+2 ,因为 number 是从未真正改变过。

问题不是因为循环开头的行 - new=0 就像其他答案所解释的那样(该行根本没有效果,您可以将其删除并查看相同的结果)。

如果您的目标是获取所有偶数斐波那契数的列表,那么您可以这样做 -

numbers = [2]
a, b = 1, 2
while b < 1000:
    x = int(len(numbers) - 1)
    a, b = b, a+b
    if b % 2 == 0:
        numbers.append(b)
print sum(numbers)

演示 -

>>> numbers = [2]
>>> a, b = 1, 2
>>> while b < 1000:
...     x = int(len(numbers) - 1)
...     a, b = b, a+b
...     if b % 2 == 0:
...         numbers.append(b)
...
>>> print(sum(numbers))
798

【讨论】:

    【解决方案2】:

    问题是没有真正得到更新。

    numbers = [1, 2]
    while new < 1000:
        new = 0  #you're resetting new here
        x = int(len(numbers) - 1)
        new = numbers[x] + numbers[x-1] # first iteration, gives 3
        if new % 2 == 0:  # 3 % 2 != 0, so it doesn't get run
            numbers.append(new)
        new += 1 # great, new is now 1.
    print sum(numbers)
    

    循环的每次迭代都这样运行,因为没有任何变化。如果你想做斐波那契,你会做这样的事情

    numbers = [1, 2]
    for _ in range(1000)
        n = numbers[-1] + numbers[-2] # use negative indices to count from the end.
        numbers.append(n)
    print sum(numbers) # sum of fibonacci I guess
    

    【讨论】:

      【解决方案3】:

      每次在循环中为变量new 添加一个时,在重复循环时将其设置回0!这意味着new 永远不会达到 1000——它将永远在循环中继续。

      要解决此问题,请将 new 的初始化移出循环。

      【讨论】:

      • 你试过运行这个吗? (虽然不是反对者)。
      • @AnandSKumar 刚刚尝试过。老实说,我认为无限循环是问题所在,程序的其余部分都很好。
      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2023-04-06
      • 2015-01-18
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2015-04-17
      • 2018-11-18
      相关资源
      最近更新 更多