循环问题在Python 3.5.1中

时间:2016-07-05 16:45:53

标签: python

使用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,循环似乎是无限的。所有帮助将不胜感激。

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