2014-01-31 5 views
1

Я пытаюсь создать генератор простых чисел в Python, в основном портируя this Сценарий проекта в термины Python, а затем записывая простые числа в текстовый документ.Генератор простых чисел

По какой-то причине, однако, он не работает, и я не могу понять, почему, поскольку он просто записывает числа по мере их появления.

def primenumbers(): 
    j = 2 
    f = open("primes.txt", "w") 
    primes = [] 
    notprimes = [] 
    ask = input("how many primes? ") 
    while len(primes) < int(ask): 
     k = 2 
     while not(k==j) or not(j%k==0): 
      k = k + 1 
     if k == j: 
      primes.append(j) 
      f.write(str(j)+"\n") 
     else: 
      notprimes.append(j) 
#  if len(primes)%1000 == 0: 
#   print("There have been " + str(len(primes)) + " primes counted so far") 
     j = j + 1 
    print("Primes written to file 'primes.txt', " + str(len(primes)) + " written") 
    f.close 
    return(" ") 

Таким образом, программа запрашивает у пользователя, сколько простых чисел он должен генерировать, и он должен затем повторить от к = 2 до J = J + 1 до тех пор, что число простых чисел, не будет достигнуто.

Кроме того, если это возможно, я хотел бы, чтобы работа с комментарием IF работала, поскольку, когда это было включено, оно повторяло то, что простое число было несколько раз. EDIT: добавление, что происходит при запуске

how many primes? 1500 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
There have been 1000 primes counted so far 
Primes written to file 'primes.txt', 1500 written 

ответ

2

Использование while not(k==j) and not(j%k==0): вместо while not(k==j) or not(j%k==0): Тогда он будет работать нормально.

Я надеюсь, что это код, который вы ищете:

def primenumbers(): 
    j = 2 
    chk = 1 
    f = open("primes.txt", "w") 
    primes = [] 
    notprimes = [] 
    ask = input("how many primes? ") 
    while len(primes) < int(ask): 
     k = 2 
     while not(k==j) and not(j%k==0): 
      k = k + 1 
     if k == j: 
      primes.append(j) 
      f.write(str(j)+"\n") 
     else: 
      notprimes.append(j) 
     if len(primes) >= 1000*chk: 
      chk = chk + 1 
      print("There have been " + str(len(primes)) + " primes counted so far") 
     j = j + 1 
    print("Primes written to file 'primes.txt', " + str(len(primes)) + " written") 
    f.close 
    return(" ") 
+0

Это работает. Должен ли он работать и в закомментированном разделе? EDIT: Нет, нет. Спасибо, в любом случае. – L0neGamer

+0

Если вы хотите распечатать, какое именно число было найдено, тогда вы можете распечатать его внутри случая «if j == k:» до или после записи простого числа в текстовый файл. Примите ответ, если это было полезно. – Vipul

+0

Что я ищу в комментариях, это каждые 1000 простых чисел, которые терминал говорит, сколько простых чисел было создано, потому что в действительности ничего не происходит на экране. Когда число простых чисел равно 1500, существует 8 «До сих пор насчитывалось 1000 простых чисел». – L0neGamer

Смежные вопросы