簡體   English   中英

為什么我的Python腳本會永遠運行?

[英]Why does my Python script run forever?

這是代碼:

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)

我做錯了什么? 歡迎批評。 謝謝你的時間。

這基本上是由於以下情況-

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

問題是什么都沒有真正更新。

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

每次在循環中向new變量添加一個時,您在重復循環時都將其設置回0 這意味着new永遠不會達到1000,它將永遠循環下去。

要解決此問題,請將new的初始化移到循環外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM