2012-01-03 6 views
1

Работа с программой в python для печати первых 1000 простых чисел (кроме 2). все, что я могу получить для вывода, - это номер 3. Не понимаю, где и когда мой цикл заканчивается. очень новое при программировании. может кто-нибудь помочь?Почему мой вложенный цикл while не работает

primeCounter = 1 
candidate = 3 

while primeCounter < 1000: 
    isPrime = True 
    counter = 2 
    while counter < candidate: 
     if candidate%counter == 0: 
      isPrime = False 
     else: 
      counter = counter + 1 

    if isPrime == True: 
     print candidate 
     primeCounter = primeCounter + 1 

    candidate = candidate + 1 
+0

Вы пробовали отлаживать его вообще? возможно, путем вывода значений переменных, которые проверяются на условные обозначения и т. д.? –

ответ

3
primeCounter = 1 
candidate = 3 

while primeCounter < 1000: 
    isPrime = True 
    counter = 2 
    while counter < candidate: 
     if candidate%counter == 0: 
      isPrime = False 
      break # <<<<<<<<<<<<<<<<< break here, or the loop will go infinite 
     else: 
      counter = counter + 1 

    if isPrime == True: 
     print candidate 
     primeCounter = primeCounter + 1 

    candidate = candidate + 1 
+0

отлично работает сейчас. спасибо – patch321

2

После того, как вы установите isPrime в False, вы никогда не увеличиваем counter снова, так что вы никогда не получите из внутреннего while цикла.

+0

это тоже сработало. Спасибо – patch321

0

Ваша проблема в блоке

while counter < candidate: 
    if candidate%counter == 0: 
     isPrime = False 

если не кандидат% счетчик, вы получите петлю бесконечности.

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