Глава 4 • Работа со списками
Выполнение этого правила поможет вам проследить за тем, какие действия вы-
полняются с каждым элементом в цикле
for
. В зависимости от того, какое число
используется — одиночное или множественное, вы сможете понять, работает ли
данная часть кода с отдельным элементом из списка или со всем списком.
Более сложные действия в циклах for
В цикле
for
с каждым элементом списка может выполняться практически любое
действие. Дополним предыдущий пример, чтобы программа выводила для каждого
фокусника отдельное сообщение:
magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
❶
print(f"{magician.title()}, that was a great trick!")
Единственное отличие этого кода от предыдущего заключается в том, что в точке
для каждого фокусника строится сообщение с его именем. При первом проходе
цикла переменная
magician
содержит значение
'alice'
, поэтому Python начинает
первое сообщение с имени
'Alice'
. При втором проходе сообщение будет начи-
наться с имени
'David'
, а при третьем — с имени
'Carolina'
:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
Тело цикла
for
может содержать сколько угодно строк кода. Каждая строка с на-
чальным отступом после строки
for
magician
in
magicians
считается находящейся
в цикле
и выполняется по одному разу для каждого значения в списке. Таким об-
разом, с каждым значением в списке можно выполнить любые операции на ваше
усмотрение.
Включим в сообщение для каждого фокусника вторую строку:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
❶
print(f"I can't wait to see your next trick, {magician.title()}.\n")
Так как оба вызова
print()
снабжены отступами, каждая строка будет выполнена
по одному разу для каждого фокусника в списке. Символ новой строки (
"\n"
) во
второй команде print
вставляет пустую строку после каждого прохода цикла.
В результате будет создан набор сообщений, аккуратно сгруппированных для
каждого фокусника в списке:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Предотвращение ошибок с отступами
67
Ca
rolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Тело цикла
for
может содержать сколько угодно строк кода. На практике часто
требуется выполнить в цикле
for
несколько разных операций для каждого эле-
мента списка.
Выполнение действий после цикла for
Что происходит после завершения цикла
for
? Обычно программа выводит некую
сводную информацию или переходит к другим операциям.
Каждая строка кода после цикла
for
, не имеющая отступа, выполняется без по-
вторения. Допустим, вы хотите вывести сообщение для всей группы фокусников
и поблагодарить их за превосходное представление. Чтобы вывести общее сообще-
ние после всех отдельных сообщений, разместите его после цикла
for
без отступа:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see your next trick, {magician.title()}.\n")
❶
print("Thank you, everyone. That was a great magic show!")
Первые две команды
print
повторяются по одному разу для каждого фокусника
в списке, как было показано ранее. Но поскольку строка
отступа не имеет, это
сообщение выводится только один раз:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you, everyone. That was a great magic show!
При обработке данных в циклах
for
завершающее сообщение позволяет подвести
итог операции, выполненной со всем набором данных. Например, цикл
for
может
инициализировать игру, перебирая список персонажей и изображая каждого пер-
сонажа на экране. После цикла выполняется блок без отступа, который выводит
кнопку
Начать
игру
, после того как все персонажи появятся на экране.
Предотвращение ошибок с отступами
В Python связь одной строки кода с предшествующей строкой обозначается от-
ступами. В приведенных примерах строки, выводившие сообщения для отдельных
фокусников, были частью цикла, потому что они были снабжены отступами. При-
менение отступов в Python сильно упрощает чтение кода. Фактически отступы
|