为什么我的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