Цикл while в Python: условия, шаг и бесконечные циклы
Обновлено:
Цикл:
while
позволяет повторять блок кода до тех пор, пока указанное условие остаётся истинным.
Общий вид:
while условие:
код
Перед каждой новой итерацией Python снова проверяет условие.
Если условие возвращает:
True
тело цикла выполняется.
Если:
False
цикл заканчивается, и программа продолжает выполнение после него.
1. Бесконечный цикл
Самый простой пример:
while True:
pass
Условие:
True
никогда не станет False.
Поэтому цикл будет выполняться бесконечно.
pass ничего не делает, поэтому мы получаем бесконечный цикл с пустым телом.
2. Как остановить программу вручную
Если программа выполняется в терминале, её можно принудительно остановить комбинацией:
Ctrl + C
Для этого обычно нужно, чтобы фокус находился именно в окне терминала.
После нажатия Ctrl + C Python прерывает выполнение программы.
Обычно в терминале появляется:
KeyboardInterrupt
Это встроенное исключение Python, которое возникает, когда пользователь прерывает выполнение программы с клавиатуры.
Например:
while True:
pass
после Ctrl + C может закончиться сообщением примерно такого вида:
KeyboardInterrupt
Для этого программа необязательно должна находиться в бесконечном цикле. Если мы вручную остановим долго выполняющуюся Python-программу с помощью Ctrl + C, также может возникнуть KeyboardInterrupt.
Бесконечный счётчик
3. Изменение переменной внутри цикла
Цикл обычно выполняет какую-то работу.
Например:
count = 0
while True:
print(count)
count += 1
Получим:
0
1
2
3
4
5
6
...
Цикл выполняется очень быстро, поэтому за короткое время терминал может вывести огромное количество строк.
Остановить программу можно:
Ctrl + C
sleep()
4. Искусственная задержка
Для эксперимента можно замедлить цикл с помощью функции:
sleep()
из модуля:
time
Например:
from time import sleep
count = 0
while True:
print(count)
count += 1
sleep(0.5)
Теперь после каждой итерации программа делает паузу примерно на:
0.5 секунды
Вывод будет происходить постепенно:
0
1
2
3
...
Это удобно, когда нужно визуально увидеть работу цикла.
Цикл с условием
5. Ограничиваем количество итераций
Вместо постоянного:
True
можно указать настоящее условие:
count = 0
while count < 10:
print(count)
count += 1
Результат:
0
1
2
3
4
5
6
7
8
9
Разберём выполнение.
Сначала:
count = 0
Проверяем:
count < 10
Получаем:
0 < 10
то есть:
True
Тело цикла выполняется.
После каждой итерации:
count += 1
увеличивает значение на единицу.
6. Когда цикл заканчивается
После итерации с:
count == 9
выполняется:
count += 1
и значение становится:
10
Python снова возвращается к условию:
count < 10
Получаем:
10 < 10
Результат:
False
Поэтому тело цикла больше не выполняется.
Упрощённо:
count = 0
↓
0 < 10 → True
↓
тело цикла
↓
count = 1
↓
1 < 10 → True
↓
...
↓
count = 10
↓
10 < 10 → False
↓
выход из цикла
start, stop и step
7. У цикла можно выделить три основные настройки
В простом числовом цикле удобно выделить:
start → откуда начинаем
stop → условие остановки
step → как изменяем значение
Например:
count = 0
while count < 10:
print(count)
count += 1
Здесь:
start → 0
stop → count < 10
step → +1
8. Другой start
count = 5
while count < 10:
print(count)
count += 1
Результат:
5
6
7
8
9
Начали не с 0, а с:
5
9. Другой step
count = 0
while count < 10:
print(count)
count += 2
Результат:
0
2
4
6
8
Шаг:
2
поэтому значение увеличивается сразу на два.
10. Другой предел
count = 0
while count < 20:
print(count)
count += 5
Результат:
0
5
10
15
Здесь:
start → 0
stop → count < 20
step → +5
Движение в обратную сторону
11. Уменьшаем значение
Цикл может идти не только от меньшего к большему.
Например:
count = 5
while count > 0:
print(count)
count -= 1
Результат:
5
4
3
2
1
Когда:
count
становится равен:
0
условие:
count > 0
даёт:
False
и цикл заканчивается.
12. Условия и шаг должны соответствовать друг другу
Если значение уменьшается:
count -= 1
условие обычно должно позволять двигаться к меньшим значениям:
while count > 0:
Например, такой код будет ошибочным с точки зрения алгоритма:
count = 5
while count < 10:
count -= 1
Сначала:
5 < 10
даёт True.
Затем значения становятся:
4
3
2
1
0
-1
-2
...
И каждое из них продолжает удовлетворять условию:
count < 10
Получается бесконечный цикл.
Поэтому при написании while важно понимать:
Как значение внутри условия изменяется и сможет ли условие когда-нибудь стать
False.
Степени двойки
13. Шаг необязательно должен быть сложением
Внутри цикла можно изменять переменную любым способом.
Например:
number = 1
while number <= 1024:
print(number)
number *= 2
Результат:
1
2
4
8
16
32
64
128
256
512
1024
На каждой итерации выполняется:
number *= 2
То есть следующее значение в два раза больше предыдущего.
Получаем степени двойки:
2⁰ = 1
2¹ = 2
2² = 4
2³ = 8
2⁴ = 16
...
14. Как работает этот цикл
Начинаем:
number = 1
Затем:
1 <= 1024 → True
Печатаем:
1
Умножаем:
number *= 2
Получаем:
2
Следующие значения:
1
↓ ×2
2
↓ ×2
4
↓ ×2
8
↓ ×2
16
...
После:
1024
значение станет:
2048
Проверка:
2048 <= 1024
вернёт:
False
и цикл завершится.
Как выполняется while
Общая схема:
1. Проверить условие
↓
2. True?
↓ ↓
да нет
↓ ↓
выполнить выйти
тело из цикла
↓
3. Вернуться к проверке
Важно:
Условие проверяется перед каждой итерацией.
Поэтому если оно изначально равно False, тело цикла не выполнится ни разу.
Например:
count = 10
while count < 5:
print(count)
Уже первая проверка:
10 < 5
возвращает:
False
Поэтому print() не выполнится ни одного раза.
Главное по первой части
Цикл while повторяет код, пока условие возвращает:
True
Общий синтаксис:
while condition:
...
Бесконечный цикл:
while True:
...
можно принудительно остановить в терминале:
Ctrl + C
При таком прерывании обычно возникает:
KeyboardInterrupt
В простом числовом цикле удобно выделять:
start
stop
step
Например:
count = 0
while count < 10:
print(count)
count += 1
где:
start → 0
stop → count < 10
step → +1
Шаг может быть другим:
count += 2
движение может идти назад:
count -= 1
или значение может изменяться совершенно другим способом:
number *= 2
Главное условие корректного конечного цикла:
Значения внутри цикла должны изменяться таким образом, чтобы условие в какой-то момент смогло стать
False.