Цикл 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.