Python: уроки, справочник и задачи

Цикл while в Python с примерами

Раздел: Основы Python · Обновлено 31.10.2026

Цикл while в Python повторяет блок кода, пока заданное условие остается истинным, и подходит для задач, где число повторений заранее неизвестно. Здесь разобраны синтаксис, проверка условия, бесконечный цикл while True, операторы break и continue, блок else, оператор := и несколько готовых программ.

Цикл while Python
Содержание статьи
  1. Синтаксис цикла while
  2. Условие цикла и оператор :=
  3. Бесконечный цикл
    1. Случайное зацикливание
    2. Прием while True
  4. Операторы break и continue
  5. Блок else в цикле while
  6. Примеры программ с циклом while
    1. Сумма цифр числа
    2. Игра угадай число
    3. Удвоение вклада
  7. Когда выбрать while, а когда for
  8. Частые вопросы
    1. Сколько раз выполнится while, если условие сразу ложно?
    2. Как сделать цикл с постусловием?
    3. Можно ли записать while в одну строку?
    4. Почему цикл while с continue зависает?
    5. Что быстрее, for или while?

Синтаксис цикла while

Запись состоит из ключевого слова while, условия, двоеточия и тела с отступом. Перед каждым проходом Python вычисляет условие: если оно истинно, тело выполняется, затем проверка повторяется. Как только условие стало ложным, управление переходит к первой строке после цикла.

n = 10
total = 0
i = 1
while i <= n:
    total += i      # добавляем текущее число
    i += 1          # двигаем счетчик
print('Сумма:', total, 'Счетчик:', i)
# Сумма: 55 Счетчик: 11

Обратите внимание на значение счетчика после цикла: он равен 11, потому что именно на этом значении условие i <= n впервые оказалось ложным. Если условие ложно с самого начала, тело не выполнится ни разу.

Условие цикла и оператор :=

В условии может стоять любое выражение, а не только сравнение. Python проверяет его истинность: ноль, пустая строка, пустой список и None считаются ложью, остальное истиной. Это позволяет писать короткие циклы, которые работают, пока в коллекции есть элементы.

tasks = ['почта', 'отчет', 'звонок']
while tasks:
    current = tasks.pop()
    print('Выполняю:', current)
print('Задач не осталось')

Условия объединяют через and, or и not: while attempts < 3 and not success. Начиная с Python 3.8 в условии можно сразу присвоить значение оператором :=. Это убирает дублирование кода, когда значение нужно и проверить, и использовать.

words = []
while (word := input('Слово (пусто для выхода): ')) != '':
    words.append(word)
print(words)

Бесконечный цикл

Цикл, условие которого никогда не становится ложным, называют бесконечным. Иногда это ошибка, иногда осознанный прием.

Случайное зацикливание

Самая частая ошибка новичков: забыть изменить переменную, от которой зависит условие. В примере ниже счетчик не увеличивается, i всегда равно 1, и программа никогда не дойдет до print.

n = 10
total = 0
i = 1
while i <= n:
    total += i
    # забыли i += 1, цикл не закончится
print(total)

Остановить зависшую программу в терминале можно сочетанием Ctrl+C, в PyCharm кнопкой Stop. Перед запуском цикла полезно ответить себе на вопрос: какая строка в теле приближает условие к False?

Прием while True

Намеренно бесконечный цикл используют для меню, игр, обработки ввода и серверов, которые ждут запросы. Условие выхода переносят внутрь тела и прерывают цикл оператором break. Такая конструкция заменяет цикл с постусловием (do-while), которого в Python нет: тело гарантированно выполнится хотя бы раз.

while True:
    command = input('Команда (help, quit): ').strip().lower()
    if command == 'quit':
        print('Выход')
        break
    if command == 'help':
        print('Доступны команды help и quit')
    else:
        print('Неизвестная команда')

Операторы break и continue

break немедленно завершает цикл, continue пропускает оставшиеся строки текущего прохода и возвращает к проверке условия. При использовании continue в while легко попасть в ловушку: если изменение счетчика стоит ниже continue, оно будет пропущено, и цикл зациклится. Поэтому счетчик меняют в начале тела.

i = 0
while i < 10:
    i += 1              # сначала меняем счетчик
    if i % 3 == 0:
        continue        # числа, кратные 3, пропускаем
    print(i, end=' ')
# 1 2 4 5 7 8 10

Подробный разбор обоих операторов с примерами для for и while есть в статье про break и continue.

Блок else в цикле while

После цикла можно добавить else. Он выполнится один раз, когда условие станет ложным. Если цикл прерван через break, блок else пропускается. Отступ else должен совпадать с отступом слова while, иначе будет синтаксическая ошибка.

count = 0
while count < 3:
    print('Цикл работает')
    count += 1
else:
    print('Условие стало ложным, цикл завершен')

Практическая польза видна в поиске с ограниченным числом попыток: else срабатывает, только если попытки кончились, а нужное значение так и не нашлось.

attempts = 3
while attempts > 0:
    if input('PIN: ') == '1234':
        print('Доступ открыт')
        break
    attempts -= 1
else:
    print('Карта заблокирована')

Примеры программ с циклом while

Несколько типичных задач, где while удобнее, чем for, потому что число шагов зависит от данных.

Сумма цифр числа

На каждом шаге берем последнюю цифру остатком от деления на 10 и отбрасываем ее целочисленным делением. Цикл заканчивается, когда от числа ничего не осталось.

number = 90517
digits_sum = 0
while number > 0:
    digits_sum += number % 10
    number //= 10
print(digits_sum)  # 22

Игра угадай число

Компьютер загадывает число с помощью модуля random, игрок угадывает, пока не попадет. Количество попыток заранее неизвестно, поэтому здесь нужен while.

import random

secret = random.randint(1, 100)
guess = None
tries = 0
while guess != secret:
    guess = int(input('Ваше число: '))
    tries += 1
    if guess < secret:
        print('Больше')
    elif guess > secret:
        print('Меньше')
print('Угадали за', tries, 'попыток')

Удвоение вклада

Сколько лет нужно держать деньги под 12% годовых, чтобы сумма выросла вдвое? Считаем год за годом, пока баланс меньше цели.

balance, target, years = 100_000, 200_000, 0
while balance < target:
    balance *= 1.12
    years += 1
print(years)  # 7

Когда выбрать while, а когда for

Оба цикла взаимозаменяемы, но код получается чище, если выбрать подходящий. Цикл for перебирает готовую последовательность и сам следит за ее концом, while требует вручную управлять условием.

СитуацияЛучше подходит
Перебрать список, строку, словарь, файлfor
Повторить действие ровно N разfor с range(N)
Повторять до правильного вводаwhile
Алгоритм с неизвестным числом шагов (НОД, разбор числа по цифрам)while
Постоянная работа программы до команды выходаwhile True

Если в while приходится вручную заводить индекс и увеличивать его на 1 до длины списка, это сигнал заменить его на for. Общий обзор обоих видов есть в статье про циклы в Python.

Частые вопросы

Ответы на вопросы, которые чаще всего задают о цикле while.

Сколько раз выполнится while, если условие сразу ложно?

Ни разу. Условие проверяется до первого прохода, поэтому при ложном условии Python сразу перейдет к коду после цикла, а если есть блок else, выполнит его.

Как сделать цикл с постусловием?

Напишите while True:, поместите в тело нужные действия, а в конце проверку if условие: break. Тело выполнится минимум один раз.

Можно ли записать while в одну строку?

Да, если тело состоит из простых инструкций: while x > 1: x //= 2. Для читаемости так делают редко, вложенные блоки в одну строку записать нельзя.

Почему цикл while с continue зависает?

Скорее всего, изменение переменной условия стоит после continue и на пропущенных проходах не выполняется. Перенесите его выше continue.

Что быстрее, for или while?

При переборе последовательности for обычно быстрее: проверка конца и получение элемента выполняются внутри интерпретатора, а в while каждую операцию со счетчиком выполняет ваш Python-код.