Почему не петля, петля?

Я пишу код для генерации первых 1000 простых чисел, и я не понимаю, почему этот код не будет зацикливаться как есть.

divisor = 1
guess = 2
count = 0
while count < 1000:
    divisor+=1
    while guess%divisor==0:
        if guess==divisor:
            print(guess)
            guess+=1
            count+=1
            divisor=1
        else:
            guess+=1
            divisor=1

Если я добавлю break в конец определений if и else (как показано ниже), то цикл будет работать нормально, как показано ниже, но я не могу этого понять.

        if guess==divisor:
            print(guess)
            guess+=1
            count+=1
            divisor=1
            break
        else:
            guess+=1
            divisor=1
            break

3 ответа

Исправленный:

divisor = 1
guess = 2
count = 0
while count<1000:
    divisor += 1
    if guess%divisor==0:            #'while' was replaced by 'if'
        if guess==divisor:
            print guess
            guess += 1
            count += 1
        else: guess += 1
        divisor = 1                 #moved here

выход:

2
3
5
7
11
13
17
...
7841
7853
7867
7873
7877
7879
7883
7901
7907
7919

Видимо. Условие:

guess%divisor==0

всегда верно.. потому что ты делаешь

divisor=1

в обоих случаях if и else

однако "перерыв" - выпрыгнуть из цикла while.so, во втором случае ваш код работает нормально.

Ваш цикл работает нормально, 1-й раз guess==divisor Это правда, поэтому он печатает, после первого времени он входит в else блок

менять:

else:
    guess+=1
    divisor=1

в

else:
    print("else ",guess)
    guess+=1
    divisor=1

и вы увидите, что работает нормально

Другие вопросы по тегам