2016-12-12 160 views
-1

我試圖編寫一個素數列表,直到列表超出特定大小。在Python中創建While循環

我現在有這就是:

list = [] 
i = 2 
while len(list) <= 10000: 
    if prime(i) == 0: 
    list.append(i) 
i = i+1 

print(list[-1]) 

其中黃金(x)是一個主要功能。

但是,這只是讓python打印出0和1的表面看起來無限循環,我也試着把i = 2放在while循環中,但是隻打印了10,001個2。

可能有人請指出我要去哪裏錯了,請解釋一下它是什麼while循環,我不是很瞭解, 謝謝

+2

修復您的縮進,當您複製問題時,它看起來很亂。 – Barmar

+1

當素數是素數時'prime()'真的返回'0'而不是'真'嗎? – Barmar

+1

就像@Barmar說的那樣,除了print語句之外,您需要在** if **語句下縮進所有內容。 – Jon

回答

1

你不發表您的prime功能,所以它是不可能知道是否導致問題。考慮將代碼發佈給它。否則:

我已將變量名list更改爲primeslist是Python中內置的函數名稱,它有時會導致使用它作爲變量名的問題。

primes = [] 
i = 2 
while len(primes) <= 10000: 
    if prime(i) == 0: 
     # Line here is indented further 
     primes.append(i) 
    # Line here is indented further 
    i += 1 

print(primes) 
print(primes[-1]) 

這是怎麼回事?看起來你的問題是由於缺乏適當的縮進而造成的。注意while循環下方的行更改。

編輯:

然而,這只是讓蟒紋出0和1的在一個看似無限循環

這是有道理的,如果是書面的縮進while循環會一直持續下去在你原來的答案。其輸出在0和1之間變化的事實很奇怪,因爲從技術上來說,唯一的輸入值應該是i = 2。請嘗試執行本文中的實現,並查看函數的素數是否正常。

+0

@ TadhgMcDonald-Jensen我確實試過運行代碼 - 但由於我們沒有'prime'函數,所以我無法這樣做。 「len(list)」只是一個疏忽而已。雖然我很欣賞你做出的更正 - 請考慮不太快地提出假設。 – Chuck

+0

是的,我很抱歉,我非常反對「這裏是工作代碼」類型的答案,並且 - 正如我剛剛發現的那樣 - 快速嚴厲判斷髮布他們的人(將從現在開始努力保持自己的態度: ) –

+0

@ TadhgMcDonald-Jensen那個男人你很酷你很酷我們很好!你是對的:它確實需要解釋,發佈不太合適的「一半」答案並不好。 – Chuck