Python допускает необязательный блок else в конце циклов while и for. Это уникальная особенность Python, не встречающаяся в большинстве других языков программирования. Синтаксис такой конструкции следующий:
while условие:
блок кода1
else:
блок кода2
for i in range(10):
блок кода1
else:
блок кода2
Блок кода2, указанный в else, будет выполнен, когда штатным образом завершается цикл while или for.
Сейчас вы можете подумать: «Как это может быть полезным?» Ведь мы можем сделать то же самое, поместив блок кода2 сразу после цикла while или for без else:
while условие:
блок кода1
блок кода2
for i in range(10):
блок кода1
блок кода2
В чем разница?

Если слово else отсутствует в описании цикла, то блок кода2 будет выполняться после завершения цикла, несмотря ни на что. Если же слово else присутствует, то блок кода2 будет выполняться только в том случае, если цикл завершается штатным образом. Под штатным завершением цикла подразумевается его завершение без использования оператора прерывания break.
Рассмотрим следующий программный код:
n = 5
while n > 0:
n -= 1
print(n)
else:
print('Цикл завершен.')
Данный цикл повторяется до тех пор, пока истинно условие n > 0. Поскольку цикл завершился штатным образом, то блок кода в инструкции else будет выполнен. Таким образом, результатом выполнения такой программы будут строки:
4
3
2
1
0
Цикл завершен.
Рассмотрим следующий программный код:
n = 5
while n > 0:
n -= 1
print(n)
if n == 2:
break
else:
print('Цикл завершен.')
Этот цикл преждевременно завершается с помощью оператора прерывания break, поэтому блок кода в инструкции else не будет выполнен. Результатом выполнения такой программы будут строки:
4
3
2
Вам может показаться, что инструкция else в циклах while и for не совсем соответствует тому, что реально происходит. Гвидо ван Россум, создатель Python, сказал, что если бы он проектировал язык Python заново, то избавился бы от else в циклах.
Напишем программу, которая определяет, содержит ли введенное пользователем число цифру 7. Вместо программного кода, написанного ранее:
num = int(input())
n = num
flag = False
while n != 0:
last = n % 10
if last == 7:
flag = True
break
n //= 10
if flag == True:
print('Число', num, 'содержит цифру 7')
else:
print('Число', num, 'не содержит цифру 7')
мы можем использовать:
num = int(input())
n = num
while n != 0:
last = n % 10
if last == 7:
print('Число', num, 'содержит цифру 7')
break
n //= 10
else:
print('Число', num, 'не содержит цифру 7')
Примечания
Примечание 1. Оператор continue не влияет на выполнение блока else в циклах.
Примечание 2. Блок else в циклах часто применяется для обработки отсутствия элементов.
Примечание 3. Блок кода else в циклах встречается не так часто на практике. Однако если вы обнаружите ситуацию, в которой применение else оправдано, то не стесняйтесь его использовать. Это может добавить ясности вашему коду!