2016-07-05 7 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) 

この機能は、[OK]を動作し、正しい結果を与えているようです。 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

に素数値の数を割り当てながらさらに、あなたはwhileループ条件としてnumberofprimesを使用しています。 'l1 = []'をループに移動します。 –

+0

あなたが本当に速くスマートなソリューションの実装を見たいのなら、これをチェックしてください。[link](http://stackoverflow.com/questions/1628949/to-find-first-n-prime-numbers-in- Python) – limbo

答えて

4

問題は、ループの繰り返しのたびにl1をリセットしないことです。あなたは `l1`各反復をリセットする必要が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 
関連する問題