Простой Python. Современный стиль программирования (Любанович) - страница 56

>>>> accusation = {'room': 'ballroom', 'weapon': 'lead pipe',

>··················'person': 'Col. Mustard'}

>>>> for card in accusation:··#··или for card in accusation.keys():

>…·····print(card)

>…

>room

>weapon

>person

Чтобы итерировать по значениям, а не по ключам, следует использовать функцию values():

>>>> for value in accusation.values():

>…·····print(value)

>…

>ballroom

>lead pipe

>Col. Mustard

Чтобы вернуть как ключ, так и значение кортежа, вы можете использовать функцию items():

>>>> for item in accusation.items():

>…·····print(item)

>…

>('room', 'ballroom')

>('weapon', 'lead pipe')

>('person', 'Col. Mustard')

Помните, что можете присвоить значение кортежу за один шаг. Для каждого кортежа, возвращенного функцией items(), присвойте первое значение (ключ) переменной card, а второе (значение) — переменной contents:

>>>> for card, contents in accusation.items():

>…·····print('Card', card, 'has the contents', contents)

>…

>Card weapon has the contents lead pipe

>Card person has the contents Col. Mustard

>Card room has the contents ballroom

Прерываем цикл с помощью break

Ключевое слово break в цикле for прерывает этот цикл точно так же, как и цикл while.

Пропускаем итерации с помощью continue

Добавление ключевого слова continue в цикл for позволяет перейти на следующую итерацию цикла, как и в случае с циклом while.

Проверяем, завершился ли цикл заранее, с помощью else

Как и в цикле while, в for имеется опциональный блок else, который проверяет, выполнился ли цикл for полностью. Если ключевое слово break не было вызвано, будет выполнен блок else.

Это полезно, если вам нужно убедиться в том, что предыдущий цикл выполнился полностью, вместо того чтобы рано прерваться. Цикл for в следующем примере выводит на экран название сыра и прерывается, если сыра в магазине не найдется:

>>>> cheeses = []

>>>> for cheese in cheeses:

>…·····print('This shop has some lovely', cheese)

>…·····break

>… else:··# отсутствие прерывания означает, что сыра нет

>…·····print('This is not much of a cheese shop, is it?')

>…

>This is not much of a cheese shop, is it?


Как и в цикле while, в цикле for использование блока else может показаться нелогичным. Можно рассматривать цикл for как поиск чего-то, в таком случае else будет вызываться, если вы ничего не нашли. Чтобы получить тот же эффект без блока else, используйте переменную, которая будет показывать, нашелся ли искомый элемент в цикле for, как здесь:

>>>> cheeses = []

>>>> found_one = False

>>>> for cheese in cheeses:

>…·····found_one = True

>…·····print('This shop has some lovely', cheese)

>…·····break

>…

>>>> if not found_one: