В этом уроке вы узнаете об операторе for…else в Python, как работает и о том, как его эффективно использовать.
Знакомство с оператором for else в Python
В Python оператор for может иметь необязательное предложение else, с которым вы, возможно, не знакомы, особенно если вы работаете с другими языками, такими как Java или C#.
Ниже показан синтаксис оператора for с блоком else:
for item in iterables:
# process item
else:
# statement
В этом синтаксисе else будет выполняться только в том случае, если цикл работает нормально. Другими словами, условие else не будет выполнено, если в цикле встретится оператор break.
Кроме того, блок else также выполняется, когда объект итерации не имеет элемента.
Следующая блок-схема иллюстрирует оператор for…else:

Оператор else весьма полезен в некоторых случаях, если вы знаете, как его эффективно применять.
Пример оператора for…else в Python
Предположим, что у нас есть список людей, где каждый человек представляет собой словарь, состоящий из имени и возраста, например:
people = [{'name': 'John', 'age': 25},
{'name': 'Jane', 'age': 22},
{'name': 'Peter', 'age': 30},
{'name': 'Jenifer', 'age': 28}]
И мы хотим найти человека по имени.
Если список содержит человека, нам нужно отобразить информацию об этом человеке. В противном случае мы хотим показать сообщение о том, что имя не найдено.
Для этого можно придумать такую программу:
people = [{'name': 'John', 'age': 25},
{'name': 'Jane', 'age': 22},
{'name': 'Peter', 'age': 30},
{'name': 'Jenifer', 'age': 28}]
name = input('Enter a name:')
found = False
for person in people:
if person['name'] == name:
found = True
print(person)
break
if not found:
print(f'{name} not found!')
Как это работает:
- Сначала запросим имя с помощью функции input().
- Затем установим для флага(найдено) значение False. Если входное имя совпадает с именем человека в списке, установим для него значение True, отобразим информацию о человеке, затем выйдем из цикла с помощью оператора Break.
- Наконец, проверим найденный флаг и отобразим сообщение.
Следующий код запускает программу с именем Peter и Maria:
1-й запуск:
Enter a name:Peter
{'name': 'Peter', 'age': 30}
2-й запуск:
Enter a name:Maria Maria not found!
Она работает отлично. Однако если вы используете оператор for else, программа будет намного короче.
Ниже показана новая версия программы, в которой используется оператор for else:
people = [{'name': 'John', 'age': 25},
{'name': 'Jane', 'age': 22},
{'name': 'Peter', 'age': 30},
{'name': 'Jenifer', 'age': 28}]
name = input('Enter a name:')
for person in people:
if person['name'] == name:
print(person)
break
else:
print(f'{name} not found!')
Используя оператор for else, программе не нужно использовать флаг и оператор if после цикла.
В этой новой программе, если введенное имя соответствует человеку в списке, она покажет информацию о человеке и выйдет из цикла с помощью оператора Break. Когда цикл встречает оператор Break, предложение else не выполняется.
