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
оправдано, то не стесняйтесь его использовать. Это может добавить ясности вашему коду!