为什么我的Python脚本会永远运行?

时间:2015-09-27 04:11:29

标签: python math fibonacci

以下是代码:

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)

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

4 个答案:

答案 0 :(得分:2)

这基本上是因为以下情况 -

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

答案 1 :(得分:1)

问题在于没有真正更新。

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

答案 2 :(得分:-1)

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

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

答案 3 :(得分:-3)

在你的while循环开始时,你设置new = 0,你的while循环设置为总是在new小于1000时,它始终是。