Что такое цикл в программировании python
Перейти к содержимому

Что такое цикл в программировании python

  • автор:

Циклы в программировании. Цикл while

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

Цикл while

«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».

Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:

while логическое_выражение

Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.

В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.

Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».

Рассмотрите блок-схему цикла while .

Блок-схема цикла while

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

С циклом while возможны две исключительные ситуации:

  • Если при первом заходе в цикл логическое выражение возвращает False , то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.
  • Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.

Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.

Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.

Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:

n = input("Введите целое число: ") while type(n) != int: try: n = int(n) except ValueError: print("Неправильно ввели!") n = input("Введите целое число: ") if n % 2 == 0: print("Четное") else: print("Нечетное")

Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.

Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.

Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.

Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.

Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .

Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.

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

После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.

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

Рассмотрим следующий пример:

total = 100 i = 0 while i  5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)

Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.

  1. Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5 , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.
  2. Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
  3. Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.
  4. Три меньше пяти. На этой итерации i присваивается 4.
  5. Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.

«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .

В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.

Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:

total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")

Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.

Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False . Иначе произойдет зацикливание.

Примечание 1. Не обязательно в выражениях total = total — n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .

Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i — 5 , или i -= 5 .

Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).

Практическая работа

  1. Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
  2. Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:
. 32 64 128 256 512 1024 .

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Циклы в Python: принципы работы и примеры использования

Циклы в Python: принципы работы и примеры использования

Циклы в Python — основной инструмент разработчика. С их помощью можно автоматизировать задачи, парой строк кода выполнять несколько действий и генерировать данные. Разбираемся с принципами работы циклов в Python на примерах.

Освойте профессию
«Python-разработчик»

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

Циклы в Python, как и в любом другом языке программирования, позволяют выполнять одно действие несколько раз подряд. Конечно, каждую операцию можно отдельно прописать в коде, но это займет много времени и места и такую конструкцию будет тяжело читать. Упростить задачу можно с помощью цикла. К примеру, для вывода в консоль цифр от одного до пяти можно воспользоваться пятью отдельными вызовами функции print().

print(1) print(2) print(3) print(4) print(5) >>> 1 >>> 2 >>> 3 >>> 4 >>> 5

А можно завернуть все в цикл for, вызывая функцию print() всего один раз. Вместо пяти строк кода получилось две. Если придется переписать все для вывода чисел с одного до десяти, то надо будет исправить только границы цикла, а не переписывать десять вызовов.

for number in range(1, 6): print(number) >>> 1 >>> 2 >>> 3 >>> 4 >>> 5

Python-разработчик
Освойте Python, самый популярный язык программирования
3 383 ₽/мес 6 150 ₽/мес

dffsdd (3)

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

  • для повторения задач. С помощью циклов можно вызывать функции несколько раз, а сами циклы могут зависеть от условий;
  • работы с данными. Можно просуммировать все числа в списке, вывести результат, сохранить его или передать аргументом в другую функцию;
  • итерации. Цикл for позволяет перебрать все символы в строке, подсчитать их количество в общем или по заданному условию — к примеру, только гласные или согласные буквы;
  • обработки файлов. Можно загрузить документ и с помощью цикла заменить в нем все вхождения определенного слова на другое.

Цикл while

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

while условие: блок_кода

В цикл while входят:

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

Реализуем простейшую проверку ввода корректного пароля пользователем. Для этого создадим переменную password и поместим в нее сам пароль, у нас это будет qwerty. Цикл while будет выполняться до тех пор, пока пользовательское значение будет отличаться от содержимого переменной password.

password = "qwerty" input_password = input("Введите пароль: ") while input_password != password: print("❌ Неверный пароль. Попробуйте снова.") input_password = input("Введите пароль: ") print("✅ Доступ разрешен. Вы ввели правильный пароль.")

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

while True: print("Это бесконечный цикл.")

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

Цикл for

С помощью for в Python удобно выполнять повторяющиеся действия для каждого элемента в коллекции (списке, кортеже или строке). Количество повторений зависит от того, сколько элементов надо пройти, а выход из цикла происходит после того, как элементы для итерирования закончились. В общем виде цикл for выглядит так:

итерируемая_коллекция = [. . . ] for временная_переменная in итерируемая_коллекция: блок_кода
  • итерируемая коллекция. Структура данных, по которой проходит цикл;
  • временная переменная. Нужна для работы со значениями коллекции на каждом новом шаге выполнения цикла;
  • блок кода. Действия с переменной, выполняемые на каждом круге.

Теперь напишем цикл, который проходится по набору чисел и определяет, четные они или нет. Будем использовать for и условия внутри блока кода.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] for num in numbers: if num % 2 == 0: print(f" - четное число") else: print(f" - нечетное число") >>> 1 - нечетное число >>> 2 - четное число >>> 3 - нечетное число >>> 4 - четное число >>> 5 - нечетное число >>> 6 - четное число >>> 7 - нечетное число >>> 8 - четное число >>> 9 - нечетное число

Станьте разработчиком на Python и решайте самые разные задачи: от написания кода до автоматизации процессов

Диапазоны чисел

Часто надо задать количество итераций, но для этого неудобно заводить новую переменную с коллекцией. В таком случае можно создать диапазон чисел для итерации, который будет жить только внутри цикла. Делается это с помощью функции range(), которой можно передать до трех аргументов.

Один аргумент. В таком случае можно создать диапазон чисел от нуля до n-1. К примеру, если указать range(5), то на выходе получим [0, 1, 2, 3, 4].

for i in range(5): print(i) >>> 0 >>> 1 >>> 2 >>> 3 >>> 4

Два аргумента. Если передать в range() сразу два аргумента, то получится диапазон от первого числа ко второму. Надо помнить, что при выводе второй аргумент будет уменьшен на единицу.

for i in range(5, 10): print(i) >>> 5 >>> 6 >>> 7 >>> 8 >>> 9

Три аргумента. Можно добавить третий аргумент, тогда можно будет задавать шаг последовательности. К примеру, если нужны только четные числа, то начинаем диапазон с четного числа и устанавливаем шаг 2.

for i in range(2, 11, 2): print(i) >>> 2 >>> 4 >>> 6 >>> 8 >>> 10

Выход из цикла с помощью break

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

Представим, что надо пройтись по всем числам в коллекции с помощью цикла for, но выйти из него, если встретилась единица.

numbers = [2, 3, 4, 1, 5, 6, 7, 8, 9] for num in numbers: if num == 1: print("Выход из цикла") break print(num) >>> 2 >>> 3 >>> 4 >>> Выход из цикла

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

numbers = [2, 3, 4, 5, 6, 7, 8, 9] for num in numbers: if num == 1: print('Выход из цикла') break print(num) >>> 2 >>> 3 >>> 4 >>> 5 >>> 6 >>> 7 >>> 8 >>> 9

Переход к следующей итерации

Можно не только принудительно выходить из цикла, но и пропускать его итерации по условию с помощью continue. Мы уже использовали range() для вывода только четных чисел коллекции. Теперь реализуем этот алгоритм с помощью пропуска итераций.

for i in range(1, 11): if i % 2 != 0: continue print(i) >>> 2 >>> 4 >>> 6 >>> 8 >>> 10

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

Читайте также 30 YouTube-каналов для тех, кто начинает изучать Python

Генератор коллекций

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

Представим, что надо быстро создать список чисел от одного до десяти. Можно объявить переменную и сделать это вручную.

num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(num) >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Это занимает много времени, особенно если в списке будет больше чисел. Поэтому можно автоматизировать задачу с помощью однострочного цикла for.

num = [i for i in range(1, 11)] print(num) >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Можно использовать и условия — к примеру, сгенерировать список только нечетных чисел.

num = [i for i in range(1, 11) if i % 2 != 0] print(num) >>> [1, 3, 5, 7, 9]

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

В Python можно из одного цикла вызывать другой цикл. В таком случае код усложняется, но это полезно во многих задачах. К примеру, надо пройтись по всем значениям таблицы. Одним циклом перебираем значения ячеек в строке, а вторым — переключаемся на новую строку. Общая запись вложенных циклов выглядит так:

for условие: блок_кода for условие: блок_кода

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

for i in range(1, 3): for j in range(1, 5): print(f'Ячейка :') >>> Ячейка 1:1 >>> Ячейка 1:2 >>> Ячейка 1:3 >>> Ячейка 1:4 >>> Ячейка 2:1 >>> Ячейка 2:2 >>> Ячейка 2:3 >>> Ячейка 2:4

Итог

  • Циклы — базовый инструмент программирования на Python. С их помощью разработчики могут быстро выполнять повторяющиеся действия, автоматизируя процесс.
  • В каждом цикле есть условие и блок кода, которые выполняются, пока условие истинно.
  • С помощью циклов for можно итерировать коллекции данных, выполняя преобразования.
  • В циклах while задается явное условие.
  • С помощью ключевого слова break можно в любой момент прервать выполнение цикла.
  • Continue позволяет пропускать итерации, не подходящие под условие.

Python-разработчик

Освойте Python с нуля. Подготовим к трудоустройству: дадим много практики, реальные проекты для портфолио, поможем с резюме. Лучшие студенты пройдут стажировки в проектах компаний-партнеров.

Что такое цикл в программировании python

Циклы позволяют выполнять некоторое действие в зависимости от соблюдения некоторого условия. В языке Python есть следующие типы циклов:

Цикл while

Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняет инструкции цикла. Он имеет следующее формальное определение:

while условное_выражение: инструкции

После ключевого слова while указывается условное выражение, и пока это выражение возвращает значение True , будет выполняться блок инструкций, который идет далее.

Все инструкции, которые относятся к циклу while, располагаются на последующих строках и должны иметь отступ от начала ключевого слова while.

number = 1 while number < 5: print(f"number = ") number += 1 print("Работа программы завершена")

В данном случае цикл while будет выполняться, пока переменная number меньше 5.

Сам блок цикла состоит из двух инструкций:

print(f"number = ") number += 1

Обратите внимание, что они имеют отступы от начала оператора while - в данном случае от начала строки. Благодаря этому Python может определить, что они принадлежат циклу. В самом цикле сначала выводится значение переменной number, а потом ей присваивается новое значение. .

Также обратите внимание, что последняя инструкция print("Работа программы завершена") не имеет отступов от начала строки, поэтому она не входит в цикл while.

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

В итоге при выполнении кода мы получим следующий консольный вывод:

number = 1 number = 2 number = 3 number = 4 Работа программы завершена

Для цикла while также можно определить дополнительный блок else , инструкции которого выполняются, когда условие равно False:

number = 1 while number < 5: print(f"number = ") number += 1 else: print(f"number = . Работа цикла завершена") print("Работа программы завершена")

То есть в данном случае сначала проверяется условие и выполняются инструкции while. Затем, когда условие становится равным False, выполняются инструкции из блока else. Обратите внимание, что инструкции из блока else также имеют отступы от начала конструкции цикла. В итоге в данном случае мы получим следующий консольный вывод:

number = 1 number = 2 number = 3 number = 4 number =5. Работа цикла завершена Работа программы завершена

Блок else может быть полезен, если условие изначально равно False, и мы можем выполнить некоторые действия по этому поводу:

number = 10 while number < 5: print(f"number = ") number += 1 else: print(f"number = . Работа цикла завершена") print("Работа программы завершена")

Цикл for

Другой тип циклов представляет конструкция for . Этот цикл пробегается по набору значений, помещает каждое значение в переменную, и затем в цикле мы можем с этой переменной производить различные действия. Формальное определение цикла for:

for переменная in набор_значений: инструкции

После ключевого слова for идет название переменной, в которую будут помещаться значения. Затем после оператора in указывается набор значений и двоеточие.

А со следующей строки располагается блок инструкций цикла, которые также должны иметь отступы от начала цикла.

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

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

message = "Hello" for c in message: print(c)

В цикле определяется переменную c , после оператора in в качестве перебираемого набора указана переменная message, которая хранит строку "Hello". В итоге цикл for будет перебираеть последовательно все символы из строки message и помещать их в переменную c. Блок самого цикла состоит из одной инструкции, которая выводит значение переменной с на консоль. Консольный вывод программы:

H e l l o

Нередко в связке с циклом for применяется встроенная функция range() , которая генерирует числовую последовательность:

for n in range(10): print(n, end=" ")

Если функцию range передается один параметр, то он означает максимальное значение диапазона чисел. В данном случае генерируется последовательность от 0 до 10 (не включительно). В итоге мы получим следующий консольный вывод:

0 1 2 3 4 5 6 7 8 9

Также в функцию range() можно передать минимальное значение диапазона

for n in range(4, 10): print(n, end=" ")

Здесь генерируется последовательность от 4 до 10 (не включая). Консольный вывод:

4 5 6 7 8 9

Также в функцию range() можно передать третий параметр, который указывает на приращение:

for n in range(0, 10, 2): print(n, end=" ")

Здесь генерируется последовательность от 0 до 10 (не включая) с приращением 2. Консольный вывод:

0 2 4 6 8

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

message = "Hello" for c in message: print(c) else: print(f"Последний символ: . Цикл завершен"); print("Работа программы завершена") # инструкция не имеет отступа, поэтому не относится к else

В данном случае мы получим следующий консольный вывод:

H e l l o Последний символ: o. Цикл завершен Работа программы завершена

Стоит отметить, что блок else имеет доступ ко всем переменным, которые определены в цикле for.

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

Одни циклы внутри себя могут содержать другие циклы. Рассмотрим на примере вывода таблицы умножения:

i = 1 j = 1 while i < 10: while j < 10: print(i * j, end="\t") j += 1 print("\n") j = 1 i += 1

В каждой итерации внутреннего цикла на консоль будет выводится произведение чисел i и j. Затем значение переменной j увеличивается на единицу. Когда внутренний цикл закончил работу, значений переменной j сбрасывается в 1, а значение переменной i увеличивается на единицу и происходит переход к следующей итерации внешнего цикла. И все повторяется, пока переменная i не станет равна 10. Соответственно внутренний цикл сработает всего 81 раз для всех итераций внешнего цикла. В итоге мы получим следующий консольный вывод:

1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

Подобным образом можно определять вложенные циклы for:

for c1 in "ab": for c2 in "ba": print(f"")

В данном случае внешний цикл проходит по строке "ab" и каждый символ помещает в переменную c1. Внутренний цикл проходит по строке "ba", помещает каждый символ строки в переменную c2 и выводит сочетание обоих символов на консоль. То есть в итоге мы получим все возможные сочетания символов a и b:

ab aa bb ba

Выход из цикла. break и continue

Для управления циклом мы можем использовать специальные операторы break и continue . Оператор break осуществляет выход из цикла. А оператор continue выполняет переход к следующей итерации цикла.

Оператор break может использоваться, если в цикле образуются условия, которые несовместимы с его дальнейшим выполнением. Рассмотрим следующий пример:

number = 0 while number < 5: number += 1 if number == 3 : # если number = 3, выходим из цикла break print(f"number = ")
number = 1 number = 2

В отличие от оператора break оператор continue выполняет переход к следующей итерации цикла без его завершения. Например, в предыдущем примере заменим break на continue:

number = 0 while number < 5: number += 1 if number == 3 : # если number = 3, переходим к новой итерации цикла continue print(f"number = ")

И в этом случае если значение переменной number равно 3, последующие инструкции после оператора continue не будут выполняться:

number = 1 number = 2 number = 4 number = 5
  • Вопросы для самопроверки
  • Упражнения для самопроверки

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

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

Python предлагает для организации циклов всего две конструкции: while и for . Теоретически мы можем организовать ещё цикл с помощью рекурсии, но это сложный подход. Сам по себе цикл достаточно прост для понимания, но на самом деле за ним скрываются сложные алгоритмы.

Нужно понимать, что когда мы говорим о циклах, то в первую очередь речь идёт об алгоритме программы, а не о синтаксической конструкции языка. В программировании очень важно знать возможности языка и применять их под свою задачу. Рассмотрим какие вообще могут быть циклы и то, как их использовать в Python'е.

Цикл while

Такой цикл есть в наверное в любом языке программирования. Вот пример на Python:

i = 1 while i < 10: print(i) i = i + 1

Цикл while работает с условием: пока оно истинно, цикл будет выполняться. Перед началом такого цикла следует задать начальные условия — в нашем примере это переменная i , которая используется для обслуживания цикла.

Хотя такой цикл кажется естественным, но на самом деле это развитие немного другой концепции, о которой практически не говорят в языках высокого уровня. Это выглядит странно, но на самом деле на самом низком уровне — в процессоре или его языке Ассемблере — никаких циклов не существует. Вместо это используются метки и операторы условного и безусловного перехода.

В Python нет подобной возможности, поэтому я приведу пример на PHP, показывающий полный аналог цикла while :

$i = 1; start: if ($i

Здесь метка start: отмечает начало блока, а командой goto мы переходим к ней после проверки условия. Именно такой код лёг в основу while — цикл с условием.

Цикл с постусловием do..while

Этот цикл похож на предыдущий, только условие проверяется в конце блока цикла. В python нет такого цикла, поэтому опять приведу пример на PHP:

$i = 0; do < echo $i; $i = $i + 1; >while ($i < 10);

Особенностью этого цикла будет то, что он выполнится как минимум один раз (до проверки условия). Поскольку в Pythone такого цикла нет, то для его имитации потребуется написать что-то вроде такого:

i = 1 print(i) i = i + 1 while i < 10: print(i) i = i + 1

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

i = 10 # если число больше 9, то цикл должен сработать один раз flag = True while flag or i < 10: print(i) i = i + 1 flag = False

Таким образом мы получаем гарантированное срабатывание цикла хотя бы один раз. Такой вариант удобен тем, что в качестве флага можно использовать любые дополнительные условия. Если же нужен «чистый» цикл do..while , то он использует команду break для принудительного завершения:

i = 1 while True: print(i) i = i + 1 if i > 10: break

Это т.н. бесконечный цикл, поскольку в его условии используется True . Лучше всё-таки стараться избегать бесконечных циклов, поскольку нужен дополнительный код для его управления. И если условие выхода (там где break ) будет зависеть от разных факторов, то есть риск, что оно не сработает и программа зависнет.

Цикл for..each

Именно такой цикл заложен в Python для конструкции for . Это цикл по итерируемой/упорядоченной последовательности. В Python, как известно всё есть объекты, и какие-то из них могут представлять собой последовательности. В простом виде это означает, что требуется перебрать массив или строку.

for s in 'Hello': print(s)

То есть итерация происходит для каждого элемента последовательности. В этом плане Python устроен достаточно хитро — он сам определят может ли объект быть итерируемым. Если да, то его можно вывести в цикле.

В других языках, где нет понятия итерируемой последовательности, цикл «for..each» работает по другому. Вначале определяется тип переменной — если это какой-то набор данных, например массив, то определяется его длина и задаётся счётчик, который последовательно будет указывать на каждый элемент набора. Можно написать аналог такого цикла на while :

word = 'Hello' lenght = len(word) i = 0 while i < lenght: print(word[i]) i += 1

Конструкция for в Python берет на себя обслуживание всей жизни цикла. При этом мы можем использовать и более сложные вещи, как например функции-генераторы.

def planet(): yield 'Mercury' yield 'Venus' yield 'Mars' yield 'Jupiter' yield 'Saturn' for p in planet(): print(p)

Всё-таки компактный код — сильная сторона Python.

Цикл for (классический)

Хотя Python использует for , но на самом деле эта команда в большинстве других языков означает цикл со счётчиком. Обратите внимание, как в цикле while мы вынуждены вводить переменную для счётчика. Так вот цикл for как раз призван упростить написание подобного кода. В Python нет такого варианта, но он есть в большинстве других языков. Я приведу пример на PHP (похожие варианты будут в Java, C, JavaScript и т.п.):

for ($i = 1; $i

Здесь for состоит из трех частей:

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

По сути этот код представляет собой более удобную форму while . Наверное стоит ещё отметить, что в Pascal'е цикл for ещё интересней, поскольку не нужно задумываться об инкременте («to» указывает на инкремент, а «downto» — это декремент):

for i:=1 to 10 do write(i); for i:=10 downto 1 do write(i);

Возникает вопрос: каким образом можно создать подобный цикл в Python? Очевидное решение — использовать while , но чаще всего используется генераторная функция range() .

for i in range(1, 10): print(i)

С практической точки зрения такой вариант ничем не уступает классическому for , хотя и требует знания этой особенности Python.

Управление циклом

Управление циклом может быть не только в виде условий для выхода, но и с помощью команд принудительной новой итерации ( continue ) и прерывания цикла ( break ).

for s in 'spam': print(s) if s == 'a': break

Команда break досрочно прекратит выполнение цикла, даже если он не до конца выполнен. Такой подход часто встречается в «бесконечном» цикле, когда нужно многократно выполнить одну и туже задачу, но добавить возможность её прервать.

while True: # Запрашиваем у пользователя ввод expression = input('Введите данные (или Enter для выхода): ') # Выходим из цикла, если пользователь ввел пустую строку if not expression: break . # делаем что нужно

Команда continue используется для тех случаев, когда в теле цикла нет необходимости выполнять код, который не нужен. Например у нас есть обход большого количества элементов, где каждый из них требует тяжелых вычислений. Но обрабатывать нужно не все элементы, а только каждый пятый (или любое другое условие). Таким образом мы используем continue для для того, чтобы принудительно начать новую итерацию и проигнорировать код цикла ниже.

for i in range(1, 100): if i % 5 != 0: continue print(i) # какие-то вычисления

Особенностью Python является то, что он позволяет использовать ветку else для циклов. Она выполнится, если в цикле не было break :

i = 1 while i < 5: print(i) i = i + 1 else: print('Сработало else')

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *