[英]Get a list of prime numbers in python 3
初學者。 我正在嘗試返回一個包含從 0 到 num 的所有素數的列表。 有人可以幫我找出我的代碼有什么問題嗎? 我總是得到一個空列表。 非常感謝! (我使用的是 python 3.6)
def task(num):
num = int(num)
lst = []
if num < 3:
return lst
else:
for i in range(3,num):
if not i & 1:
lst = lst
else:
primetest = range(3, int(i ** 0.5) + 1, 2)
for n in primetest:
if i % n != 0:
lst.append(i)
return lst
task(5)
主要問題在於您的內部 for 循環:
有了您的代碼將追加與列表i
每次發現在一些時間primetest
不是的除數范圍i
。
您可能想在此處使用布爾值來存儲您找到i
的除數這一事實,然后僅在沒有找到的情況下將其附加到列表中。
要回答您的問題,您的列表為空,因為在您的示例中, primetest
范圍始終為空:
int(3**0.5) + 1 = 3 and int(5**0.5) + 1 = 3
range(3,3,2) = []
數組為空是因為 range 函數不會包含上限,並且由於內部循環沒有做它應該在你的代碼中做的事情,結果將是一個空列表,直到任務函數的參數是上級的或等於 9
您的代碼在幾個方面都出錯了,請告訴我您是否理解以下操作的原因?
def task(num):
num = int(num)
lst = [2]
if num < 3:
return lst
for i in range(3, num + 1):
if i % 2 == 1:
for n in range(3, int(i ** 0.5) + 1, 2):
if i % n == 0:
break
else:
lst.append(i)
return lst
(注意: for else子句在這里很自然, for else子句在循環中搜索時使用,找到時中斷,如果沒有遇到中斷,則使用常規的 stopIteration 退出循環執行其他部分,我說這里很自然,因為在偽代碼中你會說“如果我的數字可以被另一個小於它的平方的數字整除,它就不是素數,否則將它添加到素數列表中”見http ://book.pythontips.com/en/latest/for_-_else.html了解更多詳情)
這絕不是一種快速的方法,但我試圖在提高代碼美感的同時盡可能接近您的嘗試精神
您可以在日期集中找到質數和最可分的數。`
a=[ int(x) for x in input("Enter 10 values: ").split() ]
c=[]
prime=[]
b=max(a)
for num in range(1,b+1):
for i in range(2,num):
if (num%i)==0:
break
else:
prime.append(num)
for i in a:
for j in prime:
if i%j==0:
c.append(i)
from collections import Counter
e=Counter(c)
f=e.most_common(1)
f
def prim(z):
lst = []
for i in range(2, z+1):
for j in range(2,i):
if i % j == 0:
break
else:
lst = lst + [i]
return lst
打印(prim(20))
結果:
[2, 3, 5, 7, 11, 13, 17, 19]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.