Какие бывают виды циклов в Python и как они работают
Что такое циклы в Python Зачем нужны циклы в Python Примеры циклов в Python
While
ForПрерывание цикла: ключевое слово break Пропуск части цикла: ключевое слово continue Последнее действие в цикле: ключевое слово else Бесконечный циклВложенные циклы в Python
Циклы — ключевое понятие не только в языках программирования, но и в жизни. Мы пользуемся ими каждый день для решения различных типов бытовых задач:
- ● когда решаем сидеть дома, пока на улице дождь, — это аналог цикла while с предусловием;
- ● когда идем в магазин со списком продуктов и проверяем после, всё ли купили, — это аналог for с итерацией, или проходом, по элементам;
- ● когда берем зонтик, если на улице дождь, и не берем, если погода хорошая, — аналог использования оператора if–else;
- ● когда пропускаем одну остановку метро и выходим на следующей—аналог примененияоператораcontinue.В статье рассмотрим,что такоециклывПитоне,как они работают,какими могут быть,для чего используются.Что такое циклывPythonЦиклы (loops) в языках программирования позволяют многократно выполнять определенное действие до тех пор, пока выполняется определенное условие.
Набор инструкций, которые нужно выполнить при наступлении условия, называют телом цикла.
Зачем нужны циклы в PythonОни используются, чтобы выполнить одну и ту же операцию несколько раз. Этот
инструмент программирования может быть полезен при решении следующих задач:
- ● повторение действий — перебрать массив и отсортировать его элементы, разбить строку на символы;
- ● автоматизация — найти путь в лабиринте или решить систему уравнений;
- ● моделирование процессов — рассчитать движение объекта или рост популяции;
- ● разработка игр—проверить условия победы или другую реализацию игровойлогики;
- ● тестирование—сгенерировать данные для проверки корректности работыпрограммы.К примеру,нужно вывести все цифры от1до9.Можно сделать это вручную,а можно при помощиloopи встроенной функцииrange.Она создает последовательность внутри заданного диапазона.Ниже представлены примеры для сравнения.
Результат (список от 1 до 9) одинаковый. Но благодаря loop удалось уменьшить количество строчек кода почти в 2 раза. А если необходимо вывести числа от 1 до 10 000? В случае с использованием for in программисту достаточно изменить одну цифру.
Код будет выглядеть так:
for i in range (1,10001): print(i)
При написании вручную придется 10 000 раз повторить команду print: print(1), print(2), print(3), print(4)... print(9999), print(10000).
Аналогичные возможности есть и в других языках программирования, но синтаксис отличается. Приведем примеры и для них, как вывести цифры от 1 до 9:
Примеры циклов в PythonВ Пайтоне программисты работают с двумя основными видами loops:
- ● while — с предусловием (например, «до тех пор, пока идет дождь, сидим дома»);
- ● for —для перебора итерируемого объекта(аналогичным образом мы проверяемсписок продуктов в магазине).Разберемся подробнее,как работает и как используется каждый.WhileВPython while—этоloopс предусловием(«до тех пор,пока»).Программист задает условие,и алгоритм проверяет его.Еслиусловиеистинно(while true),выполняется инструкция—фрагмент кода.Синтаксически это выглядит таким образом:whileУСЛОВНОЕ_ВЫРАЖЕНИЕ:ИНСТРУКЦИЯ (фрагмент кода).Когда условие не выполнилось(стало ложным),происходит выход изцикла.Whileцелесообразно использовать,когда количество повторений неизвестно и может меняться в зависимости от переменной в телеloop.К примеру,ситуация с дождем:whileИДЕТ ДОЖДЬ:СИДИМ ДОМАСколько раз(дней)придется оставаться дома—неизвестно.Но пока идет дождь(условие правдиво, true),остаемся в квартире.Когда дождь закончится(условие перестанет быть истиной),мы не будем сидеть дома(происходит выход из цикла).Пример кода: i=2while i < 10:print('Цикл выполнен', i, 'раз(а)')i=i+1Что в нем происходит?
- ● i = 2 — мы задаем переменную i и указываем ее значение, равное 2;
- ● while i < 10: — указываем нужное нам условие (пока i будет меньше 10);
- ● print('Цикл выполнен', i, 'раз(а)')иi = i+1—даем инструкцию,что сделать:вывести фразу в скобках и увеличить i на 1.
Результат выполнения кода — вывод фразы «Цикл выполнен n раз(а)». Цикл while позволяет изменять переменную: мы добавляем 1 — и видим числа 2, 3, 4, 5, 6, 7, 8, 9.
For
Это loop, перебирающий итерируемый объект. Сам процесс перебора называется итерированием.
Итерируемым объектом может быть:
- ● кортеж (tuple, неизменяемый список)— к примеру, tuple( [1, 2, 3] ) или [1, 2, 3];
- ● строка (str, strings) — например, ‘GitVerse’;
- ● список(list) —выглядит какlist('abc')и другие.Синтаксис выглядит таким образом:forИМЯ_ПЕРЕМЕННОЙinОБЪЕКТ:ИНСТРУКЦИИ (код, который должен многократно повториться).К примеру, мы идем в магазин со списком, в котором есть следующие наименования:
● хлеб;● молоко; ● масло; ● капуста.
Когда мы стоим в магазине и проверяем, все ли купили, то осуществляем итерацию по объекту «список».
Или у нас есть строка «GitVerse». При итерации по ней происходит разбиение на символы:
- ● первый — G;
- ● второй — i;
- ● третий — t;
- ● четвертый— V,и так далее.Каждая буква будет элементом итерируемого объекта. Код может выглядеть так:Gitverse_list = [39, 89, -90, 9536]for num in Gitverse_list:print(num)Разберем построчно, что в нем происходит:
- ● Gitverse_list = [39, 89, -90, 9536] — задаем итерируемый объект Gitverse_list;
- ● for num in Gitverse_list—указываем,что нам нужны элементы итерируемогообъекта (num) в итерируемом объекте Gitverse_list;
- ● print(num) — выдаем инструкцию, что нужно сделать, — вывести num.
Результат выполнения кода — вывод в консоли списка с числами по отдельности (элементами итерируемого объекта):
● 39;● 89;● –90; ● 9536.
Прерывание цикла: ключевое слово breakЭтот оператор (the break statement) останавливает цикл. Делает проход один раз — и
сразу выходит из него.Возьмем пример выше, с дождем. Если использовать break, мы как бы говорим: «Хватит
сидеть дома! Идем гулять даже в дождь!». Как выглядит код:i=2while i < 10:
print('Цикл выполнен', i, 'раз(а)') i=i+1break
Что в нем происходит:
- ● i = 2 — мы задаем переменную i и указываем ее значение, равное 2;
- ● while i < 10: — указываем нужное нам условие (пока i будет меньше 10);
- ● print('Цикл выполнен', i, 'раз(а)')иi = i+1—даем инструкцию,что сделать:вывести фразу в скобках и увеличить i на 1;
- ● break — приказываем остановиться после первой итерации.
Результат — в консоли появляется фраза «Цикл выполнен 2 раз (а)». То есть мы взяли только начальное значение i и не успели приплюсовать к нему 1, как в примере выше. Все потому, что сработал break: мы выполнили одну итерацию и вышли из loop.
Пропуск части цикла: ключевое слово continueОператор continue (the continue statement) прерывает проход цикла, который идет в
данный момент, и переходит сразу на следующий.Continue позволяет «проскочить» определенную итерацию по аналогии с тем, как мы
проскакиваем станцию метро и едем до следующей. Код выглядит таким образом:i=2while i < 10:
ifi!=5:print('Цикл выполнен', i, 'раз(а)')
i=i+1
continue
В консоли видим, что пятерку действительно «проскочили». Появляются значения 2, 3, 4, 6, 7, 8 и 9. Как это происходит? Пока условие «i не равна 5» было истиной, выводились 2, 3, 4. Затем условие «i не равна 5» стало ложным, и эту итерацию мы пропустили. После чего «вернулись в работу» и вывели оставшиеся 6, 7, 8, 9.
Последнее действие в цикле: ключевое слово elseElse — ключевое слово «иначе». Оно дает инструкцию, что делать после выполнения
итераций, но до выхода из цикла.Пример кода с использованием конструкции else: Gitverse_list = [1,2,3,4,5]for i in Gitverse_list:
print(i) else:
print ('Список пуст')
Результат — вывод чисел 1, 2, 3, 4, 5. Затем срабатывает else, благодаря чему появляется фраза «Список пуст». Можно заменить ее на любую другую: «Привет» или «End».
Изменим пример и подставим пустой объект, по которому якобы должна осуществляться итерация:
Gitverse_list = []for i in Gitverse_list:
print(i) else:
print ('Список пуст')
Итак, что происходит «под капотом». Перед запуском цикла компилятор проверяет наличие элементов в Gitverse_list. Поскольку там пусто, то заходить в цикл с for не имеет смысла (нет элементов для итерирования): это лишнее действие, которое нагружает систему. Поэтому «фор» не запускается, а сразу происходит выход на блок else. Благодаря тому, что сработал else, появляется «Список пуст».
Бесконечный цикл
Это цикл, в котором условие выполнения всегда true (истина). К примеру, оно звучит так: «пока 1 == 1» («до тех пор, пока единица равна единице»). Единица всегда равна единице, поэтому проверка показывает true, и блок с инструкцией повторяется бесконечно, пока не будет остановлен.
С бесконечными циклами нужно быть осторожными. Представьте, что на компьютере работает калькулятор, постоянно прибавляющий 1 к предыдущему значению. Процесс отнимает ресурсы машины. А что если таких процессов больше тысячи?
Пример кода на Python: i = 'Gitverse'while 1 == 1:
print('Выполняется бесконечно', i) Чем в нем происходит:
● i = 'Gitverse' — задаем i в виде строки 'Gitverse';
- ● while 1 == 1: — указываем условие, которое всегда будет истиной (можно просто написать while true;
- ● print('Выполняется бесконечно', i) — даем инструкцию, что делать (выводить фразу 'Выполняется бесконечно' и значение i).
Результат — беспрерывное выполнение кода в терминале. Процесс остановился только после команды пользователя.
Вложенные циклы в Python
Циклы в Python можно вкладывать друг в друга. Внутренний loop будет повторяться столько раз, сколько указано в условиях внешнего (при этом важно не уйти в неконтролируемый бесконечный).
Пример кода:
Gitverse_list = [1,2,3,4,5] for number in Gitverse_list:
print(f'Итерируюсь по внешнему циклу: {number}') Gitverse_list_second = [10, 20, 30, 40, 50]for i in Gitverse_list_second:
print(f'Итерируюсь по внутреннему циклу: {i}')
На первой итерации внешнего цикла (при проходе по Gitverse_list) алгоритм обнаруживает цикл для Gitverse_list_second. В результате на первой итерации внешнего loop выполняются все итерации вложенного в него внутреннего. Затем выходим из внутреннего, попадаем на вторую итерацию внешнего и снова на итерацию вложенного в него внутреннего.
В статье мы рассмотрели основные циклы Python («фор», «вайл»), их синтаксис и применение, разобрали ключевые слова. Приведенные примеры — сильно упрощенные, на крупных проектах код в разы сложнее и объемнее, однако принцип работы будет тот же.