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

为什么我的Python脚本永远运行?,python,math,fibonacci,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) number=[1,2] 而新的>>a,b=1,2 >>>b>>打印(总和(数字)) 798

代码如下:

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)
number=[1,2]
而新的<1000:
新=0
x=int(长度(数字)-1)
新=数字[x]+数字[x-1]
如果新的%2==0:
数字。追加(新)
新+=1
打印总和(数字)
我做错了什么?
批评是受欢迎的。谢谢你抽出时间

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


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

问题是没有什么东西真正得到更新

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)

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

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)
number=[2]
a、 b=1,2
b<1000时:
x=int(长度(数字)-1)
a、 b=b,a+b
如果b%2==0:
数字。附加(b)
打印总和(数字)
演示-

>>> 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]
>>>a,b=1,2
>>>b<1000时:
...     x=int(长度(数字)-1)
...     a、 b=b,a+b
...     如果b%2==0:
...         数字。附加(b)
...
>>>打印(总和(数字))
798

这是当前代码吗。当new<1000时,脚本将停止运行,而不是永远运行,因为此时new未定义。另一方面,许多程序员避免使用“new”作为变量名,因为它在许多语言中都是一个关键字。你想做什么?你想得到偶数斐波那契数的和吗?
new
总是
3
,所以总是小于
1000
。如果你不想学习使用调试器,至少用一些print语句看看你的程序在哪里没有做你认为它正在做的事情。因为调试的第一步不会顺利进行。是否尝试运行此操作?(但不是落选者)。@AnandSKumar刚刚试过。老实说,我假设无限循环是问题所在,程序的其余部分也可以。
>>> 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