Цикл — это некий набор инструкций. Он выполняется до тех пор, пока его условие истинно. Давайте разберемся, как работает цикл while
в Python.
Что такое цикл?
Циклы — фундаментальное понятие в программировании. Если вы новичок, то обязаны в них разобраться. Циклы могут помочь выполнять набор инструкций до тех пор, пока заданное условие истинно.
В Python есть два основных вида циклов:
- Цикл for.
- Цикл while.
Они очень похожи друг на друга. Но если вы хотите писать по-настоящему быстрый код, вам нужно научиться грамотно выбирать нужный цикл.
Цикл while
Суть работы цикла while
очень проста. Работает он так: ваши инструкции выполняются, пока условие истинно.
Цикл while
проверяет условие перед каждой итерацией цикла. Если возвращается True
, то выполняется блок кода внутри цикла.
Прежде чем мы возьмемся за написание кода, взгляните на блок-схему. Работает цикл следующим образом:
А теперь напишем небольшую программу. Это простой цикл, выводящий в консоль числа от 1 до 10.
x = 1 while x <= 10: print(x) x = x+1
Как вы можете заметить, тело цикла выполняется, пока x
меньше или равно 10. Если вы присвоите x
значение 20, то цикл не запустится вообще.
Вывод будет следующим:
1 2 3 4 5 6 7 8 9 10
Цикл do-while
Есть две вариации цикла while
. Первая — непосредственно сам while
, вторая — do-while
. Разница заключается в том, что do-while запустится хотя бы один раз.
Цикл while
может не запуститься вообще, если условие не будет истинным изначально. Do-while
— напротив. Тут сначала выполняется тело цикла, и только потом происходит проверка условия.
Цикл do-while
реализован в большинстве языков программирования, но в Python такого оператора нет. Тем не менее, его можно с легкостью имитировать — например, с помощью функций.
Давайте напишем код, имитирующий цикл do-while
. Все нужные инструкции мы поместим внутри функции.
x = 20 def run_commands(x): print(x) run_commands(x) x += 1 while x <= 10: run_commands(x) x += 1
Эта программа запускает run_commands()
еще до цикла while
. Но сам цикл while
не запустится: x
равен 20.
Оператор else
Если вы хотите выполнить блок кода, когда проверка условия возвращает False
, — добавьте оператор else
.
Добавим в наш код else
. Внутри этого блока напишем код, который будет выводить в консоль Готово
. Выполнится этот блок только после того, как в консоль выведутся числа от 1 до 10.
x = 1 while x <= 10: print(x) x = x + 1 else: print("Готово")
Эта программа выведет в консоль числа от 1 до 10. Как только x
станет равно 11, результатом проверки условия будет False
. После этого выполнится блок кода else
.
Однострочное объявление while
Если внутри цикла while
у вас только одна строка — можно воспользоваться однострочным вариантом. Делается это так:
x = 1 while x: print(x)
Будьте осторожны — этот цикл бесконечный.
Бесконечные циклы
Если вы не будете осторожны, то можете случайно написать бесконечный цикл. Проверка условия бесконечного цикла всегда будет возвращать True
. Пример бесконечного цикла:
x = 1 while x >= 1: print(x)
Этот цикл — бесконечный. Внутри цикла нет команды, которая изменяет значение x
. Поэтому условие x >= 1
всегда истинно. Именно из-за этого цикл будет запускаться бесконечное количество раз.
Всегда будьте внимательны, когда создаете цикл. Небольшая ошибка — и у вас бесконечный цикл, что в конечном итоге приведет к сбою в работе программы.
Управление циклом
С циклом разобрались. Наконец мы можем перейти к операторам его управления.
Когда вы начнете работать в реальных проектах, вы будете сталкиваться с разными ситуациями. Например, когда нужно добавить условие, выполнение которого завершит цикл или пропустит итерацию.
Break
Этот оператор позволяет завершить цикл, если проверка условия возвращает True
.
x = 1 while x <= 10: if x == 5: break print(x) x += 1
Вывод:
1 2 3 4
Выполнение цикла прекращается, когда x становится равно 5 — даже если x
больше или равно 1.
Continue
Допустим, вам нужно пропустить итерацию цикла, если выполняется какое-то условие. Но цикл вы не хотите завершать до тех пор, пока проверка его условия не вернет False
.
В этом случае вам нужно использовать ключевое слово continue
:
x = 1 while x <= 10: if x == 5: x += 1 continue print(x) x += 1
Вывод:
1 2 3 4 6 7 8 9 10
Как видите, цикл выводит в консоль все числа от 1 до 10 кроме 5. Когда x
становится равен 5, оставшаяся часть команд не выполняется, а начинается следующая итерация цикла.