2016-07-05 40 views
1

使用Python 3.5.1。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

需要重啓'l1'每次迭代。將'l1 = []'移到循環中。 –

+0

如果你想看到一個真正快速和智能的解決方案的實施,請查看此[鏈接](http://stackoverflow.com/questions/1628949/to-find-first-n-prime-numbers-in-蟒蛇) – limbo

回答

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