Почему не петля, петля?
Я пишу код для генерации первых 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
и вы увидите, что работает нормально