Справочник по Python · модуль 3 · списки и циклы
Глава 3.2
Цикл while
с предусловием
while повторяет блок, пока условие остаётся истинным. Такой цикл нужен, когда количество повторений заранее неизвестно.
- Категория
- Циклы и управление выполнением
- Уровень
- Начальный
- Связанные темы
- Условия, break, continue
- Зачем это знать
- Повторять действия до изменения условия
§1Что делает while
Цикл повторяет один блок кода несколько раз. В конструкции while повторение продолжается, пока условие даёт True.
while условие:
тело_цикла
После условия ставится двоеточие, а тело цикла записывается с отступом. Строки без этого отступа выполняются уже после завершения цикла.
§2Проверка перед каждым повтором
while называют циклом с предусловием, потому что условие проверяется до входа в тело — в том числе перед самым первым повтором.
- Python вычисляет условие после
while. - Если результат
True, выполняется всё тело цикла. - После тела программа возвращается к условию и вычисляет его заново.
- Если результат
False, цикл заканчивается.
Если условие ложно при первой проверке, тело while не выполнится ни разу.
§3Цикл со счётчиком
number = 1 while number <= 5: print(number) number += 1
1 2 3 4 5
Переменная number начинается с 1. В конце каждого повторения она увеличивается, поэтому после вывода числа 5 условие становится ложным.
§4Когда число повторений неизвестно
Один из типичных сценариев — принимать значения, пока пользователь не введёт специальный сигнал завершения. В примере таким сигналом служит ноль.
total = 0 count = 0 while True: number = int(input("Введите число: ")) if number == 0: break total += number count += 1 print("Сумма:", total) print("Количество:", count)
Заранее неизвестно, сколько чисел будет введено. Поэтому цикл удобно завершить в тот момент, когда получен ноль.
§5Бесконечный цикл
Если условие никогда не станет ложным, повторения не закончатся. Например, у следующего фрагмента нет пути к завершению:
while True: print("Повторение")
Сам по себе бесконечный цикл не является ошибкой синтаксиса: постоянно работающие программы действительно его используют. Но внутри должен существовать управляемый способ ожидания или завершения. В учебной задаче чаще всего нужен break либо изменение переменной в условии.
§6Досрочный выход: break
break немедленно завершает ближайший цикл независимо от его условия.
number = 1 while True: print(number) if number == 5: break number += 1
1 2 3 4 5
§7Пропуск шага: continue
continue прекращает только текущее повторение и сразу возвращает программу к следующей проверке условия.
number = 0 while number < 5: number += 1 if number == 3: continue print(number)
1 2 4 5
Счётчик увеличивается до continue. Если перенести number += 1 ниже, то при значении 3 программа будет бесконечно пропускать строку увеличения.
§8Блок else у цикла
else после while выполняется при обычном завершении: когда условие стало ложным. Если цикл прерван через break, блок else пропускается.
number = 1 while number <= 3: print(number) number += 1 else: print("Цикл завершён без break")
1 2 3 Цикл завершён без break
§9Квадраты до границы
Задача: вывести квадраты натуральных чисел, которые не превышают заданное значение.
limit = 30 number = 1 while number * number <= limit: print(number * number) number += 1
1 4 9 16 25
§10Анализ цифр числа
Задача: узнать, сколько раз в натуральном числе встречается цифра 3 и сколько раз повторяется его последняя цифра.
number = 31333 last_digit = number % 10 count_three = 0 count_last = 0 while number > 0: digit = number % 10 if digit == 3: count_three += 1 if digit == last_digit: count_last += 1 number //= 10 print("Цифр 3:", count_three) print("Последняя цифра встречается:", count_last)
Цифр 3: 4 Последняя цифра встречается: 4
Выражение number % 10 получает последнюю цифру, а number //= 10 удаляет её. Без удаления цифры условие number > 0 не изменялось бы.
§11while или for
| Цикл | Когда выбирать | Пример задачи |
|---|---|---|
while | завершение зависит от условия, число повторений заранее неизвестно | читать числа до ввода нуля |
for | нужно перебрать готовую последовательность значений | обработать каждый символ строки |
Следующая глава подробно разбирает цикл for. Многие задачи можно решить обоими способами, но подходящий цикл делает условие завершения заметнее.
§12Частые ошибки
| Что написано | Что произойдёт | Как правильно |
|---|---|---|
while number < 5 | SyntaxError: нет двоеточия | while number < 5: |
| счётчик внутри цикла не изменяется | условие может навсегда остаться истинным | изменять данные, от которых зависит условие |
continue стоит раньше изменения счётчика | цикл может застрять на одном значении | обновить счётчик до continue |
ожидать else после break | блок else будет пропущен | помнить: else означает завершение без break |
| тело цикла без отступа | IndentationError | добавить отступ в четыре пробела |
лишний while True без выхода | программа не перейдёт к следующей строке | добавить понятное условие или управляемый break |
§13Проверьте себя
Может ли тело while не выполниться ни разу?
Да. Условие проверяется до первого входа в тело. Если оно сразу ложно, цикл пропускается.
Чем отличаются break и continue?
break завершает весь цикл, а continue пропускает остаток только текущего повторения.
Когда выполнится else после while?
Когда цикл завершился обычным способом, потому что условие стало ложным. После break этот блок не выполняется.
§14Шпаргалка
while condition: actionbreakcontinuewhile ...: ...else:Итог главы
while проверяет условие перед каждым повторением и работает, пока оно истинно. Чтобы цикл завершился, его условие должно измениться или должен выполниться break. continue пропускает один шаг, а else отмечает завершение без break.