Как работает while: повтор по условию, стоп-слово и выход из цикла

Pythonобновлено 07.10.202610 мин чтенияесть тренажёр

Цикл while в Python повторяет команды, пока условие остаётся истинным. Его выбирают, когда заранее неизвестно, сколько будет шагов: ввод продолжается до слова «стоп», игра идёт до победы, число делится до нуля. Ниже — разбор с примерами и 6 задач с автопроверкой.

Загружаем…

Что такое цикл 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
150да251
225да122
312да63
46да34
53нет—цикл закончен, вывод: 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 до 100forЧисло шагов известно: 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 — как «пока».