使用Python 3.5.1。
我正在尝试构建一个while循环,它迭代一个函数,直到将一定数量的素数附加到列表中。我之前写过一个函数,它接受一个数字,评估它是否是素数,并将它添加到列表中,如果它是素数:
def primelister(n):
if n < 10:
return
else:
l1=[]
l2=[]
ts1=np.arange(1,(n+1),1)
for i in ts1:
if n%i==0:
l1.append(i)
continue
else:
continue
if len(l1) < 3:
l2.append(i)
print(l2)
此功能正常,似乎可以给出正确的结果。我想将函数实现到while循环中,其中n的值从10开始,并在每个循环时递增1。循环将继续,直到达到一定数量的素数(即在列出1000个素数时停止)。
这是我到目前为止所尝试的:
n=10
l1=[]
l2=[]
while numberofprimes < 100:
ts1=np.arange(1,(n+1),1)
for i in ts1:
if n%i==0:
l1.append(i)
continue
if len(l1) < 3:
l2.append(i)
numofprimes=len(l2)
print("Number of primes so far:", numberofprimes)
n = n + 1
循环显然已经破裂。输出始终只有1,循环似乎是无限的。所有帮助将不胜感激。
答案 0 :(得分:4)
问题是在每次while循环迭代后你没有重置l1
。此外,您使用numberofprimes
作为while循环条件,同时将素数值分配给numofprimes
import numpy as NP
n=10
l2=[]
numberofprimes = 0
while numberofprimes < 100:
l1 = []
ts1=NP.arange(1,(n+1),1)
for i in ts1:
if n%i==0:
l1.append(i)
if len(l1) < 3:
l2.append(i)
numberofprimes=len(l2)
print("Number of primes so far:", numberofprimes)
n = n + 1