Оператор цикла for else в Python — как работает

В этом уроке вы узнаете об операторе 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:

Схема работы оператора for else в Python

Оператор 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 не выполняется.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *