Почему код работает неверно, если else стоит под if, но если сдвинуть его на одну табуляцию влево, то всё работает исправно?
Пытался сделать вывод простых чисел в диапазоне. Так выглядит мой изначальный код, он выводит мне набор дублирующихся чисел:
for number in range(1, 100):
if number > 1:
for i in range(2, number):
if(number % i) == 0:
break
else:
print(number)
Но если написать else под for, то всё работает исправно и он выводит простые числа в нужном диапазоне:
for number in range(1, 100):
if number > 1:
for i in range(2, number):
if(number % i) == 0:
break
else:
print(number)
Ответы (2 шт):
Вы не понимаете, как работает код, который выдаёт правильный результат. И это закономерно. Дело в том, что хотя синтаксически это и выгладит правильно, но смысл "закопан" довольно глубоко. Я не буду сейчас всё это подробно расписывать, просто покажу, как эта задача должна решаться "обычным" образом:
for number in range(1, 100):
if number > 1:
Simpl = True
for i in range(2, number):
if(number % i) == 0:
Simpl = False
break
if Simpl:
print(number)
Так гораздо более полнятно.
К чему во втором случае относится else? К for, и срабатывает в том случае, если цикл не был прерван break, т.е. ни одно число не было делителем number. Всё правильно, значит number - простое. Такое использование else - специфично для Python (может, и ещё где есть).
В первом же случае else относится к if, и срабатывает на первом числе, не являющемся делителем number (9 не делится на 2? тут же выводим 9) - но ведь у него могут быть другие делители.