Программирование  •  02 ноября  2022  •  5 мин чтения

Python кусает свой хвост: какие в нём бывают циклы и зачем они нужны

Иногда программу нужно заставить много раз повторить одно и то же действие. Для этого в языках программирования, в том числе в Python, существует специальный инструмент — цикл.

Что такое циклы в Python

В Python циклы работают так же, как в большинстве других языков программирования. Программа повторяет определённое действие несколько раз. Действие задано в теле цикла, число повторений — в его условии. В условии может быть вполне конкретное число, например пять или десять. А может быть более сложная проверка — например, анализ переменной из тела цикла. Одно повторение тела цикла называется итерацией.
Схема цикла в упрощённом виде. После выполнения действий из тела всегда происходит возврат к условию и повторная проверка

У циклов в Python есть особенность. Внутри тела цикла можно использовать оператор else, который сработает, когда условие цикла перестанет выполняться. То есть цикл не просто завершится, а перед окончательным выходом совершит последнее действие. Например, в условии задано повторение цикла 25 раз, в теле — вывод чисел из условия последовательно, а в операторе else — слово «Хватит». Тогда цикл сначала выведет по очереди числа от 1 до 25, а потом «Хватит».

В большинстве других языков для этого пришлось бы использовать кроме цикла ещё и конструкцию if-else, то есть немного усложнять код. Python позволяет встроить условие else прямо внутрь цикла.

В циклах в языке Python можно использовать ещё два оператора:

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

continue, наоборот, мгновенно заставляет программу перейти к началу цикла и начать следующую итерацию. Его используют, чтобы при определённых условиях пропустить часть действий из тела цикла и сразу начать новое повторение.

Материал по теме:
Серьёзный язык для backend: что такое Python и как стать Python-разработчиком

Зачем нужны циклы в Python

Цикл нужен для того, чтобы упаковать множество повторений в более короткий и легко читаемый код. Например, если нужно вывести числа от 1 до 15, можно 15 раз написать вывод, или сделать цикл, который займет две строки.
Циклы помогают создавать более сложные инструкции
Функция range здесь позволяет сгенерировать последовательность от 1 до 15, а не перечислять все числа по очереди. А цикл, соответственно, поочередно выводит эти числа

Циклы помогают создавать более сложные инструкции:

● Повторение кода заранее неизвестное количество раз. Число повторений будет зависеть от переменной, которая изменяется в другой части кода.

● Изменение переменной из условия цикла. Она будет изменяться в теле цикла в зависимости от логики работы программы, увеличивать или уменьшать количество итераций или не давать циклу завершиться. Например:

count = 0

while count < 6:

print(count)

count += 2

Программа выведет «0, 2, 4», а потом прекратит работу, так как переменная count достигла 6. Переменная из условия изменяется в самом теле цикла, то есть тело влияет на количество повторений.

Цикл for

«For» с английского переводится как «для». Этот вид цикла используют, когда количество итераций зависит от того, сколько в условии задано элементов.

Его синтаксис выглядит так:

for [элемент] in [последовательность]:

[тело цикла]

Цикл for в Python повторит тело цикла столько раз, сколько в этой последовательности элементов. Например, вот так:

collection = [1,2,3,4,5,6,7,8,9,10]

n = 10

for i in collection:

l = n*i

print(l)

Этот код выведет результаты умножения заданного числа n на элементы из переменной collection по очереди: «10, 20, 30, 40, 50, 60, 70, 80, 90, 100».

Переменные collection и n можно задать вручную, а можно предложить пользователю ввести их с клавиатуры. Тогда цикл получится использовать для умножения и вывода любой вводимой последовательности данных.

Внутрь цикла for можно добавить оператор else, который описывали выше:

collection = [1,2,3,4,5,6,7,8,9,10]

n = 10

for i in collection:

l = n*i

print(l)

else:

print ('Хватит умножать')

В этом случае в конце итерации по элементам коллекции программа выведет на экран фразу «Хватит умножать», и только потом цикл завершится.

Внутри цикла for нельзя изменять итерируемый объект (переменная i) — это может привести к ошибкам. Его можно использовать для вывода или параметров в промежуточных вычислениях, но новые значения лучше не присваивать. Если нужно изменить переменную, возможно, понадобится другой цикл — while.

Цикл while

Цикл while с условием в Python используется, когда точное число повторений неизвестно и может изменяться в зависимости от поведения переменной в теле цикла.

«While» можно перевести с английского как «до тех пор, пока». Этот оператор будет выполнять тело цикла до тех пор, пока выражение в его условии остаётся истинным. Чтобы условие действительно имело шанс стать ложным, в теле цикла нужно изменить переменную, которая может использоваться как счётчик итераций.

Например, рассмотрим такой код:

n = 1

while n < 6:

print('Цикл выполнился', n, 'раз(а)')

n = n+1

Вне цикла переменной n задаётся первоначальное значение, равное 1. В условии цикла проверяется, переменная меньше шести или нет. Условие верно, поэтому на экран будет выведено «Цикл выполнился 1 раз(а)». Затем к n прибавляется 1, и всё повторяется. После того, как цикл повторится 5 раз, n будет равна 6, условие станет ложным и цикл завершится.

Бесконечные циклы

В Python цикл while может стать бесконечным. Это происходит, если его условие никогда не становится ложным, то есть момент выхода из цикла не наступит. Например, возьмём код цикла while с некоторыми изменениями:

n = 1

while n < 6:

print('Цикл выполнился', n, 'раз(а)')

Прибавление к n числа 1 было удалено. В итоге n не будет изменяться и навсегда останется единицей, а цикл никогда не прервётся, и будет снова и снова выводить фразу «Цикл выполнился 1 раз(а)».

Чтобы этого не допустить, при использовании конструкций с циклами нужно проверять, что условие выхода из цикла будет выполнено. Иначе программа зависнет и придётся завершать её принудительно.

Бесконечных циклов стараются избегать и используют редко, например для периодического вывода информации о времени, статусе выполнения программы или блока кода, при логировании и отладке приложения.

Вложенные циклы

Внутри тела цикла можно определить и вызвать другой цикл. Его называют вложенным. Внутренний цикл выполнится и будет повторяться столько раз, сколько описано в условии внешнего.
При выходе из основного цикла вложенный уже не будет исполняться
При выходе из основного цикла вложенный уже не будет исполняться, однако при выходе из вложенного происходит возврат к основному
Вложенный цикл также может стать бесконечным, если не выполнится условие выхода из него.

Примеры циклов в Python

Рассмотрим несколько примеров, как можно описать или реализовать цикл в Python.

Первый пример:

for i in range(10, 5, -2):
print(i)

Здесь используется вызов метода range с тремя параметрами. Третий параметр задаёт шаг итерации, то есть определяет, сколько элементов будет пропущено при перемещении от начала до конца диапазона. По умолчанию шаг равен 1 и его можно не указывать. В примере указано значение −2, то есть каждое повторение цикла будет смещать начальную позицию на 2 элемента назад. В итоге после выполнения программы в терминале будет последовательность «10, 8, 6».

Второй пример:

word_str = "Hello, world!"

for n in word_str:

print(n)

В цикле не обязательно работать с числами — можно использовать строку. Цикл пройдёт по всем элементам строки по очереди и выведет её по буквам в столбик, так как функция print выводит каждое значение с новой строки.

Третий пример:

n = 6

while n > 0:

n -= 1

print(n)

Этот классический цикл while будет выводить значение n, пока оно не достигнет нуля. Правда, цикл идет не от меньшего к большему, а наоборот, и используется оператор вычитания −=. Он равнозначен выражению n = n − 1. В итоге цикл выведет последовательность «6, 5, 4, 3, 2, 1».

Четвёртый пример:

iter = 6

while n > 0:

iter -= 1

if iter == 3:

continue

print(n)

print('Конец цикла')

В цикле используется оператор continue. Без него цикл просто выведет последовательность чисел от 6 до 0. Наличие continue изменят поведение: когда переменная iter становится равна 3, цикл пропускает операцию вывода и переходит к началу. В итоге будет выведена последовательность «6, 5, 4, 2, 1, 0».

Совет эксперта

Николай Федосеев
Циклы — одна из базовых конструкций любого языка программирования. Ни один алгоритм или программа не обходятся без использования циклов для выполнения однотипных конструкций языка или блоков кода. Программисту важно понимать, как работают циклы, в какой области применяются, какие у них есть особенности и ограничения. Только так он сможет писать эффективный код и решать продуктовые задачи.

Статью подготовили:

Николай Федосеев
Яндекс Практикум
Education Mentor,
SDE в PlayCanvas
Яндекс Практикум
Редактор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Wed Sep 04 2024 20:56:17 GMT+0300 (Moscow Standard Time)