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

Эта функция работает нормально, и кажется, выдавать правильные результаты , Я хотел бы реализовать функцию in в цикле 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

, если вы хотите увидеть действительно быструю и умную реализацию решения, пожалуйста, ознакомьтесь с этой [link] (http://stackoverflow.com/questions/1628949/to-find-first-n-prime-numbers-in- питон) – limbo

ответ

4

Проблема в том, что вы не сбрасываете l1 после каждой итерации цикла while. Кроме того, вы используете 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