for magician in magicians:
Эта строка означает, что нужно взять первое значение из списка magicians и сохранить его в переменной magician. Первое значение в списке — 'alice'. Затем Python читает следующую строку:
. .print(magician)
Python выводит текущее значение magician, которое все еще равно 'alice'. Так как в списке еще остались другие значения, Python возвращается к первой строке цикла:
for magician in magicians:
Python берет следующее значение из списка — 'david' — и сохраняет его в magician. Затем выполняется строка:
. .print(magician)
Python снова выводит текущее значение magician; теперь это строка 'david'. Весь цикл повторяется еще раз с последним значением в списке, 'carolina'. Так как других значений в списке не осталось, Python переходит к следующей строке в программе. В данном случае после цикла for ничего нет, поэтому программа просто завершается.
Помните, что все действия повторяются по одному разу для каждого элемента в списке независимо от их количества. Если список содержит миллион элементов, Python повторит эти действия миллион раз — обычно это происходит очень быстро.
Также помните, что при написании собственных циклов for временной переменной для текущего значения из списка можно присвоить любое имя. Однако на практике рекомендуется выбирать осмысленное имя, описывающее отдельный элемент списка. Несколько примеров:
for cat in cats:
for dog in dogs:
for item in list_of_items:
Выполнение этого правила поможет вам проследить за тем, какие действия выполняются с каждым элементом в цикле for. В зависимости от того, какое число используется — одиночное и множественное, вы сможете понять, работает ли данная часть кода с отдельным элементом из списка или со всем списком.
Более сложные действия в циклах for
В цикле for с каждым элементом списка может выполняться практически любое действие. Дополним предыдущий пример, чтобы программа выводила для каждого фокусника отдельное сообщение:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
(1) . .print(magician.title() + ", that was a great trick!")
Единственное отличие этого кода от предыдущего заключается в том, что в точке (1) для каждого фокусника строится сообщение с его именем. При первом проходе цикла переменная 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(magician.title() + ", that was a great trick!")
(1) . .print("I can't wait to see your next trick, " + magician. title() + ".\n")
Так как обе команды print снабжены отступами, каждая строка будет выполнена по одному разу для каждого фокусника в списке. Символ новой строки ("\n") во второй команде print (1) вставляет пустую строку после каждого прохода цикла. В результате будет создан набор сообщений, аккуратно сгруппированных для каждого фокусника в списке:
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.
Тело цикла for может содержать сколько угодно строк кода. На практике часто требуется выполнить в цикле for несколько разных операций для каждого элемента списка.
Выполнение действий после цикла for
Что происходит после завершения цикла for? Обычно программа выводит сводную информацию или переходит к другим операциям.
Каждая строка кода после цикла for, не имеющая отступа, выполняется без повторения. Допустим, вы хотите вывести сообщение для всей группы фокусников и поблагодарить их за превосходное представление. Чтобы вывести общее сообщение после всех отдельных сообщений, разместите его после цикла for без отступа:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
. .print(magician.title() + ", that was a great trick!")
. .print("I can't wait to see your next trick, " + magician.title() + ".\n")
. .
(1) print("Thank you, everyone. That was a great magic show!")
Первые две команды print повторяются по одному разу для каждого фокусника в списке, как было показано ранее. Но поскольку строка (1) отступа не имеет, это сообщение выводится только один раз: