def eratos(n):
numbers = []
prime = [True for i in range(n+1)]
p=2
while(p <= n):
if (prime[p] == True):
for i in range(p * 2, n+1, p):
prime[i] = False
p+=1
lis =[]
# Print all prime numbers
for p in range(2, n):
if prime[p]:
numbers.append(p)
print(numbers)
if __name__:
n = 12
eratos(n)
这将打印 而我只喜欢上一个清单[2,3,5,7,11]。 我理解for循环我将检查我的设定范围中是否有素数然后将其添加到我的列表中然后重复并检查下一个数字。如果可能的话,我希望检查范围内的所有数字,然后同时附加所有数字,或者一次追加一个,但只返回最终列表。
答案 0 :(得分:0)
这是因为 print
语句在for
循环中为。只需将其移到外面:
for p in range(2, n):
if prime[p]:
numbers.append(p)
print(numbers) # outside for loop
现在numbers
列表将在for
循环完成后打印。最后一句话:为什么要构建lis
?你似乎永远不会使用它。
您还可以通过以下方式提高可读性(并提高效率):
def eratos(n):
prime = [True] * (n+1)
for p in range(2,n+1):
if prime[p]:
for i in range(2*p,n+1,p):
prime[i] = False
# Print all prime numbers
numbers = [p for for p in range(2,n) if prime[p]]
print(numbers)