Статья Автор: Александр Ф. Алейников

7.6.2 Блок else в циклах

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

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать