Что такое цикл while
Цикл while — это команда «повторяй, пока условие верно»: перед каждым шагом Python проверяет условие и, если оно истинно, выполняет тело цикла. Как только условие станет ложным, программа перейдёт к строке после цикла.
energy = 3
while energy > 0:
print("Прыжок! Осталось сил:", energy)
energy = energy - 1
print("Устал, отдыхаю")
Прыжок! Осталось сил: 3
Прыжок! Осталось сил: 2
Прыжок! Осталось сил: 1
Устал, отдыхаю
Запись цикла while состоит из слова while, условия и двоеточия. Так этот оператор описан и в официальной документации Python[1]. Под ней с отступом в 4 пробела идёт тело — те строки, которые повторяются. Слово while переводится с английского как «пока», и программу можно читать вслух: «пока сил больше нуля, прыгай и уменьшай силы». В условии используют те же сравнения, что и в if: >, <, ==, !=, >=, <=, а также and, or и not.
Главное отличие от if: условие проверяется не один раз, а снова и снова. Если в теле цикла ничего не меняет переменную из условия, while будет крутиться бесконечно. Поэтому у каждого такого цикла должна быть строка, которая приближает конец, — здесь это energy = energy - 1.
Как Python проверяет условие на каждом шаге
Python выполняет while по схеме из 2 действий: проверить условие, затем выполнить тело, и снова вернуться к проверке. Если условие ложно с самого начала, тело не выполнится ни разу — это нормально и не считается ошибкой.
Проследим за программой, которая ищет, сколько раз число 50 можно разделить пополам нацело, пока оно не станет меньше 5. Такая таблица называется трассировкой: в ней видно значение переменной и результат проверки на каждом повторе.
n = 50
steps = 0
while n >= 5:
n = n // 2
steps += 1
print(n, steps)
| Проверка | n перед проверкой | n >= 5? | n после шага | steps |
| 1 | 50 | да | 25 | 1 |
| 2 | 25 | да | 12 | 2 |
| 3 | 12 | да | 6 | 3 |
| 4 | 6 | да | 3 | 4 |
| 5 | 3 | нет | — | цикл закончен, вывод: 3 4 |
Обратите внимание: цикл while сделал 5 проверок, а шагов — 4. Последняя проверка дала «нет», и тело уже не выполнялось. Такая разница в единицу — частая причина ошибок вида «программа делает на один шаг больше или меньше». Если ответ не сходится, нарисуйте таблицу на бумаге: это быстрее, чем гадать. Трассировку используют и на уроках информатики, и при подготовке к ОГЭ, где по материалам ФИПИ есть задания на чтение готовых программ.
Счётчик и условие остановки
Чтобы повторить действие N раз через while, нужны 3 строки: создать счётчик до цикла, проверять его в условии и увеличивать в конце тела. Это та же работа, которую цикл for с range делает автоматически.
i = 1
while i <= 5:
print(i, "в квадрате =", i * i)
i += 1
Если забыть i += 1, переменная навсегда останется равной 1, и программа будет печатать одну и ту же строку без остановки. Если поставить увеличение в начало тела, первым выведется не 1, а 2. Поэтому для простого «повторить 5 раз» удобнее for: в нём счётчик не потеряется. А while со счётчиком нужен, когда шаг меняется по сложному правилу — например, сумма растёт, пока не превысит лимит.
total = 0
day = 0
while total < 100:
day += 1
total += day * 3
print("Сто очков набрано за", day, "дн.")
Здесь заранее неизвестно, сколько дней понадобится: каждый день приносит на 3 очка больше предыдущего, и цикл while сам определит момент, когда сумма достигнет 100. Ответ — 8 дней.
Ввод данных до стоп-слова
Если пользователь вводит данные, пока не напишет условленное слово или число, — это классическая задача для цикла while. Первое значение читают до цикла, а следующее — последней строкой тела.
name = input("Имя гостя (или конец): ")
guests = 0
while name != "конец":
print("Добро пожаловать,", name)
guests += 1
name = input("Имя гостя (или конец): ")
print("Всего гостей:", guests)
Такой шаблон называют «чтение с опережением»: условие всегда проверяет только что прочитанное значение. Если перенести input() в начало тела, стоп-слово тоже поприветствуют как гостя. Тот же приём работает с числами: в учебных задачах часто пишут «вводятся числа, последнее число — 0». Тогда условие выглядит как while x != 0, а внутри цикла число обрабатывают и сразу читают следующее. Подробнее о вводе и преобразовании строк в числа — в уроке про функцию input.
Команды break и continue
Команда break сразу завершает цикл, а continue пропускает остаток текущего шага и возвращает к проверке условия. Обе обычно стоят внутри if, иначе сработают на первом же повторе.
secret = 7
tries = 0
while tries < 5:
tries += 1
guess = tries * 2
if guess == secret:
print("Угадал!")
break
if guess > secret:
print(guess, "— перебор, следующий")
continue
print(guess, "— мало")
print("Попыток:", tries)
У while, как и у for, есть необязательная ветка else: она выполняется, если цикл закончился потому, что условие стало ложным, а не из-за break. Новичкам эта конструкция редко нужна, но в задачах «найти, а если не нашли — сообщить» она экономит флажок-переменную. В документации Python break, continue и else у циклов описаны в одном разделе учебника, его полезно прочитать целиком.
Частый приём — while True с break внутри. Условие True никогда не станет ложным, поэтому выход возможен только через break. Так удобно писать меню, игры и ввод с проверкой: сначала прочитать, затем решить, выходить или нет.
Бесконечный цикл: почему возникает и как остановить
Бесконечный цикл возникает в 3 типичных случаях: переменная из условия не меняется, меняется не в ту сторону или условие записано так, что всегда истинно. Программа при этом не падает с ошибкой, а просто «зависает».
count = 10
while count > 0:
print(count)
count += 1
Здесь счётчик растёт, а условие ждёт, что он уменьшится, — вывод никогда не закончится. В IDLE такую программу останавливают сочетанием Ctrl+C. Редактор на нашем сайте ограничивает время работы программы, поэтому зависание прервётся само и появится сообщение. Разбор всех причин и способов защиты — на странице о бесконечном цикле.
Проверить себя перед запуском помогает вопрос: «Какая строка в теле приближает условие к False?» Если такой строки нет и нет break — цикл не закончится. Ещё одна ловушка — сравнение дробных чисел на точное равенство: while x != 1.0 может не остановиться, если x из-за округления станет 0.9999999. Для дробей безопаснее писать while x < 1.0.
Цикл while или for: как выбрать
Выбор между двумя циклами — это вопрос о том, известно ли число повторов до начала. Если известно — проще for, если повторять нужно «до события» — нужен цикл с условием.
| Ситуация | Что выбрать | Почему |
| Вывести числа от 1 до 100 | for | Число шагов известно: 100 |
| Перебрать буквы слова | for | Последовательность готова |
| Читать ввод до слова «стоп» | с условием | Неизвестно, сколько строк введут |
| Делить число на 10, пока не 0 | с условием | Шагов столько, сколько цифр |
| Игра до победы или 3 проигрышей | с условием | Конец зависит от событий |
Любой for можно переписать через цикл с условием и счётчиком, но наоборот — не всегда. Поэтому цикл с условием считают более общим, а for — удобным частным случаем. В федеральной образовательной программе по информатике для 8 класса оба вида названы прямо: циклы с условием и циклы с переменной[2]. Как устроен перебор последовательностей, рассказано в уроке про цикл for.
Задачи на цикл while с автопроверкой
Чтобы закрепить тему, решите 6 задач в тренажёре вверху страницы: напишите код, нажмите «✓ Проверить», и программа прогонит решение на нескольких тестах. Справа появится список тестов, а при ошибке — «Ожидалось» и «Получилось».
Порядок задач продуман: сначала ввод до нуля, затем счётчики, деление на 10, стоп-слово и в конце бесконечный цикл с выходом по условию. Кнопку «Подсказка» открывайте, если застряли, а «Показать решение» — только после нескольких своих попыток. Самопроверка закрепляет навык лучше, чем чтение готового кода, — это показало исследование Roediger и Karpicke[3]. Через пару дней решите те же задачи заново по памяти. Ещё упражнения есть в подборке задач на циклы с разбором.
Когда цикл while не подходит
Цикл while не подходит, когда число повторов известно заранее или нужно перебрать готовую последовательность. В этих 4 случаях лучше взять другой инструмент.
- Повторить действие ровно 10 раз. Цикл for с range короче на 2 строки и не даст забыть про счётчик.
- Перебрать 5 элементов списка. Через цикл с условием придётся вручную следить за индексом и рисковать выйти за границу.
- Нарисовать квадрат из 4 сторон черепашкой. Это фиксированное число повторов — снова for.
- Ждать нажатия клавиши в игре с 60 кадрами в секунду. В графических библиотеках для этого есть события, а самодельная проверка в цикле «повесит» окно.
«Цикл с условием работает медленнее for, поэтому его нельзя использовать». Это миф: разница в скорости для школьных задач незаметна, а выбирать цикл стоит по смыслу задачи.
«Бесконечный цикл ломает компьютер». Это не подтверждается: он занимает процессор, пока программу не остановят, но ничего не портит. Ctrl+C или кнопка остановки возвращают всё как было.
Чего делать нельзя
Нельзя запускать цикл с условием, которое ничто внутри не меняет, — это главная причина зависаний. Остальные правила тоже касаются того, как цикл начинается и заканчивается.
- Нельзя забывать изменять переменную условия в теле цикла: без
i += 1или новогоinput()выход не наступит. - Не следует писать бесконечный цикл без выхода, если программа должна когда-нибудь закончиться.
- Не стоит сравнивать дробные числа через
!=в условии: из-за округления точного равенства может не случиться. - Нельзя читать ввод только внутри тела, если стоп-слово не должно обрабатываться как обычные данные.
- Не допускается смешивать табы и пробелы в отступах: руководство PEP 8 рекомендует 4 пробела[4].
- Не стоит заменять цикл десятком копий одной и той же строки: такой код трудно читать и менять.
Отступы в теле цикла — частый источник сообщений об ошибках, их разбор есть на странице об ошибке IndentationError. А применить цикл с условием в настоящем проекте поможет игра «Угадай число»: там цикл крутится, пока игрок не отгадает загаданное.
Источники
[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[3] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
[4] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
[5] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.
Вопросы и ответы
Сколько раз выполнится тело, если условие сразу ложно?
Ни одного. Python проверит условие, получит False и перейдёт к строке после цикла. Ошибки при этом не будет.
Можно ли в условии использовать and и or?
Да. Например, условие lives > 0 and score < 10 держит игру, пока у игрока есть жизни и он ещё не набрал 10 очков. Повторы закончатся, как только одна из частей станет ложной.
Как остановить зависшую программу?
В IDLE и в терминале нажмите Ctrl+C — Python прервёт выполнение и покажет KeyboardInterrupt. В редакторе на сайте программа остановится сама по ограничению времени.
Есть ли в Python цикл do-while?
Отдельной конструкции нет. Её заменяет бесконечный цикл, внутри которого сначала выполняется действие, а в конце стоит проверка и выход.
Чем досрочный выход отличается от пропуска шага?
Первая команда выходит из цикла совсем, вторая только пропускает остаток текущего повтора и возвращает к проверке условия. Если циклы вложены, обе действуют лишь на ближайший.
Где такой цикл встречается в Scratch?
Ему соответствует блок «повторять, пока не»: он крутится до наступления события. Разница в том, что в Scratch условие записано как «пока не», а в Python — как «пока».