Цикл while в Python выполняет блок кода, пока проверяемое условие остаётся истинным (True). Как только условие становится ложным (False), цикл завершается.
Представьте, что размешиваете сахар в чае. Вы не знаете, сколько движений ложкой потребуется — вы мешаете, пока сахар не растворится. По схожему принципу работает while: пока условие истинно, зацикленный код будет выполняться снова и снова.
Вспомним, что будет, если на странице регистрации ввести email без «@». Код внутри While в Питоне это заметит, и программа попросит повторить попытку. Заранее неизвестно, сколько раз пользователь ошибётся, поэтому здесь while удобнее, чем for — цикл будет повторяться до тех пор, пока пользователь не введёт корректный адрес.
Что такое цикл while в Python
Цикл while в Python — это конструкция, которая повторяет блок кода до тех пор, пока указанное условие остаётся истинным. Как только условие становится ложным, выполнение цикла прерывается, и программа переходит к следующей строке. Количество повторений заранее не задаётся: цикл сам проверяет условие перед каждой итерацией.
Чем while отличается от for
Цикл for проходит по заранее известной последовательности: списку, строке, диапазону чисел. Количество итераций определяется длиной этой последовательности ещё до старта программы.
Цикл while не привязан к последовательности и продолжает выполнение, пока условие истинно. Количество повторений зависит от того, что происходит внутри программы во время работы.
Синтаксис цикла while
Базовый синтаксис while в Python выглядит так:
# Задаём начальное значение переменной
a = 10
# Условие: цикл выполняется, пока a больше нуля
while a > 0:
# Тело цикла: уменьшаем a на 1 при каждой итерации
a -= 1
Конструкция состоит из ключевого слова while, условия и тела цикла. Условие — любое выражение, которое возвращает True или False. Тело — блок кода, который выполняется, пока условие истинно.
Роль двоеточия и отступов
Двоеточие после условия сообщает Python, что дальше идёт блок кода. Без двоеточия интерпретатор вернёт синтаксическую ошибку.
Отступ четыре пробела или один Tab обозначает границы цикла while в Python. Все строки с одинаковым отступом относятся к одному блоку.
# Условие проверяется перед каждой итерацией
while a > 0:
# Эта строка входит в тело цикла
a -= 1
# Эта строка не входит в тело цикла и выполняется после его завершения
print(a)
Как работает цикл while в Python
Алгоритм работы while укладывается в три шага:
- Интерпретатор вычисляет условие.
- Если результат True — выполняется тело цикла.
- Возвращается к шагу 1.
Когда условие возвращает False, интерпретатор пропускает тело и переходит к коду ниже. Если условие ложное с самого начала, тело не выполнится ни разу. Именно так работает цикл с предусловием — в отличие от цикла с постусловием, где тело выполняется хотя бы один раз.
Полезный блок со скидкой
Пока цикл ещё не ушёл в бесконечность — самое время освоить что-то новое в ИТ. Держите промокод Практикума на любой платный курс: KOD (можно просто нажать). Он даст скидку при покупке и позволит сэкономить на обучении.
Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.
Счётчик: почему важно изменять переменную
В Pythone внутри тела цикла while должно происходить вычисление, влияющее на условие. Обычно это изменение переменной-счётчика.
i = 1
while i <= 5:
print(i)
i += 1
Без строки i += 1 переменная навсегда останется равной 1. В итоге условие i <= 5 никогда не станет ложным, и будет выполняться бесконечно.
Бесконечный цикл while True
Иногда бесконечный цикл в Python создают намеренно. Конструкция while True создаёт бесконечный цикл — тело выполняется без остановки. Выход из него создают внутри тела через оператор break.
# Условие всегда истинно
while True:
# Считываем ввод пользователя
user_input = input("Введите число: ")
# Проверяем, ввёл ли пользователь нужное значение
if user_input == "0":
# Выходим из цикла при выполнении условия
break
Бесконечный цикл используется в интерактивных меню, серверных приложениях и игровых сценариях.
Управление циклом: break, continue, else
В Python поведение цикла while меняется с помощью оператора break, оператора continue и блока else.
Оператор break: принудительный выход
Break прерывает цикл немедленно, независимо от того, истинно условие или нет. Интерпретатор выходит из цикла и переходит к коду после него.
i = 0
# Цикл выполняется, пока i меньше 10
while i < 10:
# Выходим из цикла, когда i равно 5
if i == 5:
break
# Выводим текущее значение i
print(i)
# Увеличиваем i на 1
i += 1
Вывод:
0
1
2
3
4
Оператор continue: пропуск итерации
Continue прерывает итерацию и возвращает интерпретатор к проверке условия.
i = 0
# Цикл выполняется, пока i меньше 5
while i < 5:
# Увеличиваем i на 1 до проверки условия
i += 1
# Пропускаем вывод, если i равно 3
if i == 3:
continue
# Выводим значение i
print(i)
Вывод:
1
2
4
5
Блок else: выполнение после нормального завершения
Блок else выполняется один раз — после того, как условие цикла стало ложным. Если цикл завершился через break, блок else не выполняется.
i = 0
# Цикл выполняется, пока i меньше 3
while i < 3:
# Выводим текущее значение i
print(i)
# Увеличиваем i на 1
i += 1
# Выполняется после завершения цикла без break
else:
print("Цикл завершён")
Вывод:
0
1
2
Цикл завершён
Флаги (сигнальные метки)
Флаг — это переменная с булевым значением, которая в Питоне управляет работой цикла while. Вместо break внутри сложной логики можно переключить флаг на False, и цикл завершится на следующей проверке условия.
Сигнальные метки делают код более читаемым, когда условий выхода несколько.
# Создаём флаг
active = True
# Цикл работает, пока флаг True
while active:
# Просим пользователя ввести слово
word = input("Напиши 'стоп' для выхода: ")
# Проверяем, ввели ли слово 'стоп'
if word == "стоп":
# Выключаем флаг (цикл остановится)
active = False
# Если ввели любое другое слово
else:
# Просто печатаем текст
print("Работаем дальше!")
Вложенные циклы while
Иногда в Питоне один while размещают внутри другого. Например, нам нужно перебрать таблицу или координаты. Тогда первый while отвечает за строки, второй — за элементы внутри строки.
# Начинаем с первой строки
row = 1
# Повторяем, пока не дойдём до третьей строки
while row <= 3:
# В каждой новой строке начинаем с первого столбца
col = 1
# Перебираем столбцы в текущей строке
while col <= 2:
# Показываем номер строки и столбца
print(row, col)
# Переходим к следующему столбцу
col += 1
# Переходим к следующей строке
row += 1
Вывод:
1 1
1 2
2 1
2 2
3 1
3 2
Программа сначала берёт первую строку и проходит все столбцы в ней. Потом переходит ко второй строке и снова начинает со столбца 1. Затем так же обрабатывает третью строку.
Переменную col нужно создавать заново перед каждым новым проходом по строке. Без этого столбцы во второй строке и дальше уже не будут перебираться.
Практические примеры использования цикла while в Python
Пример 1 — счётчик и простая итерация
count = 10
while count > 0:
print(count)
count -= 1
print("Старт!")
Результат в терминале:
10
9
8
7
6
5
4
3
2
1
Старт!
Пример 2 — ввод данных от пользователя (input)
password = ""
while password != "yandex123":
password = input("Введите пароль: ")
print("Доступ разрешён")
Пример работы в терминале:
Введите пароль: 123
Введите пароль: qwerty
Введите пароль: yandex123
Доступ разрешён
Пример 3 — поиск элемента в списке
fruits = ["яблоко", "банан", "вишня", "груша"]
index = 0
while index < len(fruits):
if fruits[index] == "вишня":
print(f"Найдено на позиции {index}")
break
index += 1
else:
print("Не найдено")
Цикл проходит по списку и ищет элемент "вишня". Если находит — выводит его позицию и завершает цикл через break.
Результат в терминале:
Найдено на позиции 2
Индексация в Python начинается с 0, поэтому "вишня" находится на позиции 2.
Пример 4 — бесконечный цикл с break
total = 0
while True:
value = input("Введите число (stop для итога): ")
if value == "stop":
break
total += int(value)
print(f"Сумма: {total}")
Цикл работает бесконечно, пока пользователь не введёт stop. Все введённые числа суммируются.
Пример работы в терминале:
Введите число (stop для итога): 5
Введите число (stop для итога): 10
Введите число (stop для итога): 3
Введите число (stop для итога): stop
Сумма: 18
Пример 5 — флаг вместо break
running = True
attempts = 0
while running:
guess = input("Угадайте число (1-10): ")
attempts += 1
if guess == "7":
print(f"Верно! Попыток: {attempts}")
running = False
else:
print("Неверно, попробуйте ещё")
Программа продолжает работать, пока переменная running равна True. Когда пользователь угадывает число 7, значение меняется на False, и цикл завершается.
Пример работы в терминале:
Угадайте число (1-10): 3
Неверно, попробуйте ещё
Угадайте число (1-10): 9
Неверно, попробуйте ещё
Угадайте число (1-10): 7
Верно! Попыток: 3
Пример 6 — вложенный цикл while
i = 1
while i <= 5:
j = 1
line = ""
while j <= i:
line += "$ "
j += 1
print(line)
i += 1
Результат:
$
$ $
$ $ $
$ $ $ $
$ $ $ $ $
Пример 7 — меню программы
while True:
print("\n1. Приветствие")
print("2. Текущая дата")
print("3. Выход")
choice = input("Выберите пункт: ")
if choice == "1":
print("Привет!")
elif choice == "2":
from datetime import date
print(date.today())
elif choice == "3":
print("До встречи")
break
else:
print("Неизвестная команда")
Программа показывает меню и ждёт, пока пользователь выберет действие. После выполнения выбранной команды меню выводится повторно, пока пользователь не выберет выход.
Пример работы в терминале:
1. Приветствие
2. Текущая дата
3. Выход
Выберите пункт: 1
Привет!
1. Приветствие
2. Текущая дата
3. Выход
Выберите пункт: 3
До встречи
Сравнение while и for
| Критерий | while | for |
| Количество итераций | Неизвестно заранее | Определено длиной коллекции или range() |
| Условие продолжения | Любое логическое выражение | Наличие следующего элемента |
| Счётчик | Нужно обновлять вручную | Обновляется автоматически |
| Риск бесконечного цикла | Высокий при ошибке в логике | Минимальный |
| Типичное применение | Ожидание ввода, обработка потоков | Перебор списков, строк, словарей |
Типичные ошибки при использовании while
- Условие никогда не становится ложным. Внутри цикла нужно менять переменную, от которой зависит условие, иначе программа зависнет.
x = 0
while x < 5:
# без этой строки цикл уходит в бесконечность
x += 1
- Лишний сдвиг переменной. Счётчик меняется дважды — в теле цикла и за его пределами. В итоге значения пропускаются.
- Неверный знак сравнения. Вместо < пишут<= и наоборот. Цикл выполняется на одну итерацию больше или меньше, чем нужно.
- Изменение переменной не в том месте. Если счётчик обновляется в начале тела цикла, а не в конце, первая итерация работает с неправильным значением.
- Условие всегда ложно с самого начала. Поэтому цикл не выполняется ни разу. Нужно следить за начальным значением переменной до запуска.
x = 0
while x < 5:
# без этой строки цикл уходит в бесконечность
x += 1
- Использование while вместо for. Когда заранее известно количество итераций, while усложняет код без причины — в таких случаях лучше использовать цикл for с range().
Что дальше
Попробуйте запустить примеры из статьи, изменить условия и значения переменных. Далее изучите функции Python, чтобы создавать программы, в которых повторяющийся код вынесен в переиспользуемые блоки — очень удобно.
Бонус для читателей
Если вам интересно писать код и вы хотите разобраться, какой язык программирования выбрать для старта, — держите промокод Практикума на любой платный курс: KOD (можно просто нажать). Он даст скидку при покупке и позволит сэкономить на обучении.
Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям. Начать можно в любой момент, карту привязывать не нужно.
