W3docs

Циклы while в Python: подробное руководство

Циклы while в Python: синтаксис, break, continue, else, вложенные и бесконечные циклы с понятными примерами.

Цикл while выполняет блок кода многократно до тех пор, пока условие равно True. В отличие от цикла for, который перебирает известную последовательность элементов, цикл while — правильный выбор, когда заранее неизвестно, сколько итераций потребуется: например, при чтении пользовательского ввода, опустошении очереди или повторных попытках выполнить операцию до её успешного завершения.

В этой главе рассматриваются:

  • Базовый синтаксис и порядок вычисления условия
  • break — досрочный выход из цикла
  • continue — переход к следующей итерации
  • Конструкция else — код, который выполняется при нормальном завершении цикла
  • Вложенные циклы while
  • Заглушка pass
  • Бесконечные циклы и способы их избежать
  • Когда выбирать while, а когда for

Базовый синтаксис

while condition:
    # block executed while condition is True

Python вычисляет condition перед каждой итерацией. Если оно равно True, выполняется блок с отступом. После завершения блока условие проверяется снова. Цикл завершается, как только условие принимает значение False.

Счёт от 1 до 5

python— editable, runs on the server

Вывод:

1
2
3
4
5

Здесь i начинается с 1. После каждого print значение i увеличивается на 1. Когда i достигает 6, условие i <= 5 становится False и цикл останавливается.

Переменная-счётчик должна обновляться внутри цикла. Если забыть i += 1 (или аналогичное обновление), условие никогда не станет False и возникнет бесконечный цикл.

Пример обратного отсчёта

count = 5
while count > 0:
    print(count)
    count -= 1
print("Liftoff!")

Вывод:

5
4
3
2
1
Liftoff!

Код после блока while выполняется один раз после завершения цикла — в данном случае print("Liftoff!") находится за пределами цикла.

Цикл до опустошения списка

Любой объект, имеющий булево значение, может служить условием. Пустой список является ложным значением (falsy), поэтому можно естественным образом опустошать список:

stack = [1, 2, 3]
while stack:
    print(stack.pop())

Вывод:

3
2
1

while stack — сокращение для while len(stack) > 0. Когда список становится пустым, он принимает ложное значение и цикл завершается.


Оператор break

break немедленно выходит из цикла, независимо от условия.

python— editable, runs on the server

Вывод:

0
1
2
3
4

Когда num равно 5, срабатывает break и цикл завершается — значения от 5 до 9 не выводятся.

Когда использовать break: остановить поиск, как только найдено совпадение; прервать цикл при возникновении ошибки; выйти из цикла меню, когда пользователь выбирает «выход».


Оператор continue

continue пропускает остаток текущей итерации и сразу возвращается к проверке условия.

i = 0
while i < 8:
    i += 1
    if i % 2 == 0:
        continue
    print(i)

Вывод:

1
3
5
7

Когда i чётное, continue пропускает print(i) и цикл возвращается к вычислению условия с обновлённым i.

Важно: увеличивайте счётчик перед проверкой continue, а не после. Если i += 1 стоит после continue, i останется чётным навсегда и цикл будет выполняться бесконечно.


Конструкция else

Цикл while в Python поддерживает необязательный блок else. Он выполняется только если цикл завершился нормально — то есть условие стало False — и пропускается, если цикл был прерван оператором break.

Нормальное завершение

i = 1
while i <= 3:
    print(i)
    i += 1
else:
    print("Done!")

Вывод:

1
2
3
Done!

Цикл, прерванный оператором break

i = 1
while i <= 5:
    if i == 3:
        break
    print(i)
    i += 1
else:
    print("No break")

Вывод:

1
2

"No break" не выводится, потому что break завершил цикл до того, как условие могло стать False.

Практическое применение: линейный поиск

Конструкция else особенно полезна для шаблонов поиска. Блок else выполняется только тогда, когда искомый элемент не найден:

numbers = [4, 7, 2, 9, 1]
target = 9
i = 0
while i < len(numbers):
    if numbers[i] == target:
        print("Found", target, "at index", i)
        break
    i += 1
else:
    print(target, "not found")

Вывод:

Found 9 at index 3

Вложенные циклы while

Цикл while может содержать внутри себя другой цикл while. Внутренний цикл выполняет все свои итерации при каждой отдельной итерации внешнего цикла.

row = 1
while row <= 3:
    col = 1
    while col <= 3:
        print(row * col, end="  ")
        col += 1
    print()
    row += 1

Вывод:

1  2  3  
2  4  6  
3  6  9  

Важно: оператор break внутри внутреннего цикла выходит только из внутреннего цикла. Чтобы одновременно выйти из обоих циклов, используйте переменную-флаг или оформите код в виде функции и используйте return.


Оператор pass

pass — это заглушка, не выполняющая никаких действий. Используйте её, когда синтаксис требует наличия цикла while, но тело ещё не реализовано:

i = 0
while i < 3:
    pass  # TODO: add logic later
    i += 1

Без pass Python вызовет IndentationError, поскольку пустой блок является недопустимым синтаксисом.


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

Бесконечный цикл выполняется вечно, потому что его условие никогда не становится False. В большинстве случаев это ошибка — но существуют и намеренные случаи использования.

Случайный бесконечный цикл

# WARNING: this loop never ends — do not run
i = 1
while i <= 5:
    print(i)
    # forgot to increment i

Без i += 1 переменная i остаётся равной 1, условие всегда True, и цикл выполняется до тех пор, пока программа не будет остановлена вручную (Ctrl+C).

Намеренный бесконечный цикл с break

# WARNING: intentional infinite loop — requires Ctrl+C to stop outside an app
while True:
    answer = input("Type 'quit' to exit: ")
    if answer == "quit":
        break
    print("You typed:", answer)

while True — намеренная идиома, означающая «продолжать до явной остановки». Внутри обязательно должен быть break (или return), иначе программа зависнет.

Дополнительные шаблоны с интерактивными циклами смотрите в главе Пользовательский ввод в Python.


Циклы while и for: сравнение

СитуацияПредпочтительный вариант
Известно количество итераций или есть последовательностьfor
Цикл выполняется до изменения условияwhile
Нужно читать ввод, пока пользователь не выйдетwhile True + break
Нужны индекс и значение из спискаfor + enumerate()
Нужно опустошить или потребить структуру данныхwhile

Используйте for, когда это возможно; переходите на while, когда конечное условие динамично или неизвестно в начале цикла.


Практика

Практика
What does the else clause of a while loop do?
What does the else clause of a while loop do?
Практика
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
Практика
Which of the following would cause a while loop to run forever?
Which of the following would cause a while loop to run forever?
Was this page helpful?