Цикл for python и цикл while — операторы программного языка, а именно: операторы итерации, позволяющие повторять код заданное число раз.
Цикл For — синтаксис
Как уже пояснялось, цикл for в Python — итератор, основанный на цикличности. Он действует по элементам tuple и list, словарным ключам и иным итерируемым объектам.
Цикл в Python начинают с ключевого слова for, после которого идет произвольное имя переменной, хранящее значение последующего объекта задаваемой последовательности. Общий синтаксис for…in в python выглядит так:
for <переменная> in <последовательность>:
<действие>
else:
<действие>
Составляющие “последовательности” перечисляются друг за другом “переменной” цикла. Вернее, переменная указывает на такие элементы. Для каждого из них выполняется “действие”.
Простой цикл for в Python на конкретном примере:
>>> languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: ... print(x) ... C C++ Perl Python >>>
Блок else особенный. Если программисты, работающий с Perl знакомы с ним, то для тех, кто взаимодействует с C и C++ — это новшество. Семантически он функционирует тождественно циклу while.
Выполняется лишь, когда цикл не “останавливается” оператором break. То есть, он выполняется исключительно после прохождения всеми элементами заданной последовательности.
Оператор прерывания в python — break
Если в программе цикл for необходимо прервать оператором break, он завершится, и программный поток станет продолжаться без активации из else.
Чаще всего фразы break в python связуются с условными операторами.
edibles = ["отбивные", "пельмени","яйца","орехи"]
for food in edibles:
if food == "пельмени":
print("Я не ем пельмени!")
break
print("Отлично, вкусные " + food)
else:
print("Хорошо, что не было пельменей!")
print("Ужин окончен.")
Если запустить данный код, получится нижеследующий итог:
Отлично, вкусные отбивные Я не ем пельмени! Ужин окончен.
Удаляем “пельмени” из имеющегося списка данных и получаем:
Отлично, вкусные отбивные Отлично, вкусные яйца Отлично, вкусные орехи Хорошо, что не было пельменей! Ужин окончен.
Оператор пропуска python — continue
Допустим, антипатия к такой продукции у пользователя не столь велико, чтобы полностью отказаться от ее потребления. В результате продолжается работа цикла с оператором continue. В последующем скрипте используется оператор continue, для продолжения итерации по списку при «контакте с пельменями».
edibles = ["отбивные", "пельмени","яйца","орехи"]
for food in edibles:
if food == "пельмени":
print("Я не ем пельмени!")
continue
print("Отлично, вкусные " + food)
# здесь может быть код для наслаждения едой:-)
else:
print("Ненавижу пельмени!")
print("Ужин окончен.")
Итог:
Отлично, вкусные отбивные Я не ем пельмени! Отлично, вкусные яйца Отлично, вкусные орехи Ненавижу пельмени! Ужин окончен.
Итерация по спискам с функцией range()
Если требуется получить доступ к индексам списка, не понятно как использовать цикл for в подобных целях. Возможно получение доступа ко всем элементам, но индекс элемента останется недоступным. Однако существует метод получения доступа как к индексу элемента, так и к самому элементу. В этих целях используется функция range() в сочетании с функцией длины len():
fibonacci = [0,1,1,2,3,5,8,13,21]
for i in range(len(fibonacci)):
print(i,fibonacci[i])
Получаем:
0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21
Внимание! При применении
len()кlistилиtuple, получается соответствующее число элементов заданной последовательности.
Сложности итераций по спискам
При переборе списка рекомендуется избегать динамики списка в теле цикла. Для наглядности можно предложить следующий вариант:
colours = ["красный"]
for i in colours:
if i == "красный":
colours += ["черный"]
if i == "черный":
colours += ["белый"]
print(colours)
Что получится при применении print(colours)?
['красный', 'черный', 'белый']
Во избежание подобного рекомендуется взаимодействовать с копией посредством срезов, как в приведенном ниже примере:
colours = ["красный"]
for i in colours[:]:
if i == "красный":
colours += ["черный"]
if i == "черный":
colours += ["белый"]
print(colours)
Результат:
['красный', 'черный']
Был изменен список colours, но такое действие не повлияло на цикл. Данные, которые нуждались в итерировании, остались неизменными во время выполнения цикла.
Enumerate в python 3
Enumerate является встроенной функцией Python. Большая часть новичков, а также некоторые опытные программисты не знают о ее существовании. Она позволяет производить автоматический счет итераций цикла. Например:
for counter, value in enumerate(some_list): print(counter, value)
Функция enumerate тоже принимает необязательный аргумент (значение начала отсчета, принимается по умолчанию за 0). Что делает ее еще более эффективной.
my_list = ['яблоко', 'банан', 'вишня', 'персик']
for c, value in enumerate(my_list, 1):
print(c, value)
# Результат:
# 1 яблоко
# 2 банан
# 3 вишня
# 4 персик















