Цикл while
Цикл while
Вы уже умеете принимать решения с помощью if/elif/else. Следующий шаг — повторение: выполнять одни и те же действия многократно, пока выполняется какое-то условие. Для этого в Python существуют циклы. Начнём с самого фундаментального — цикла while.
Синтаксис while
while условие:
# тело цикла — выполняется, пока условие True
Python проверяет условие перед каждой итерацией. Если условие True — выполняет тело. Если False — выходит из цикла. Если условие ложно с самого начала — тело не выполняется ни разу.
count = 1
while count <= 5:
print(count)
count += 1
print("Готово")
Вывод:
1
2
3
4
5
Готово
Разбор: count начинается с 1. На каждой итерации выводим count и увеличиваем на 1. Когда count становится 6 — условие count <= 5 ложно, цикл завершается.
Обязательное изменение условия
Самая распространённая ошибка с while — бесконечный цикл: условие никогда не становится ложным.
# ОПАСНО: бесконечный цикл — не запускайте без Ctrl+C
x = 1
while x > 0:
print(x)
# x не изменяется! условие всегда True
Всегда убеждайтесь, что в теле цикла что-то изменяет переменную из условия, приближая его к False.
Цикл с вводом пользователя
while особенно удобен, когда нужно продолжать работу, пока пользователь не введёт нужное значение:
password = ""
while password != "secret":
password = input("Введите пароль: ")
print("Доступ разрешён")
Цикл продолжается бесконечно до тех пор, пока пользователь не введёт "secret". После этого условие становится ложным, и программа выводит сообщение.
Счётчики и накопители
while отлично подходит для накопления значений:
total = 0
n = 1
while n <= 10:
total += n # суммируем числа от 1 до 10
n += 1
print(f"Сумма 1..10 = {total}") # 55
Флаговый паттерн
Иногда удобно управлять циклом через булевую переменную-флаг:
is_running = True
while is_running:
command = input("Команда (quit для выхода): ")
if command == "quit":
is_running = False
else:
print(f"Вы ввели: {command}")
print("Программа завершена")
Флаг is_running делает намерение явным: цикл продолжается, пока «программа работает».
while с числовыми алгоритмами
Многие математические алгоритмы естественно выражаются через while:
# Поиск первой степени 2, превышающей 1000
n = 1
power = 0
while n <= 1000:
n *= 2
power += 1
print(f"2^{power} = {n} > 1000")
# Алгоритм Евклида: НОД двух чисел
a = 48
b = 18
while b: # пока b не равно 0 (truthy)
a, b = b, a % b
print(f"НОД = {a}") # 6
Алгоритм Евклида — классический пример, где while b: означает «пока b ненулевое».
Угадай число: классический пример
Соберём классическую игру «угадай число» — она хорошо иллюстрирует возможности while:
secret = 42
attempts = 0
while True: # специальный приём: бесконечный цикл с явным break
guess = int(input("Угадай число (1-100): "))
attempts += 1
if guess < secret:
print("Больше!")
elif guess > secret:
print("Меньше!")
else:
print(f"Правильно! За {attempts} попытки.")
break # выход из цикла — разберём в уроке 4-4
Конструкция while True: создаёт цикл, который теоретически не заканчивается. Выход осуществляется через break при правильном ответе. Это идиоматический Python-паттерн для циклов, где условие выхода проверяется внутри тела.
Визуализация выполнения
Чтобы лучше понять, как работает while, полезно «прокрутить» выполнение вручную:
i = 0
total = 0
# Итерация 1: i=0 → 0 <= 4 → True → total=0, i=1
# Итерация 2: i=1 → 1 <= 4 → True → total=1, i=2
# Итерация 3: i=2 → 2 <= 4 → True → total=3, i=3
# Итерация 4: i=3 → 3 <= 4 → True → total=6, i=4
# Итерация 5: i=4 → 4 <= 4 → True → total=10, i=5
# Проверка: i=5 → 5 <= 4 → False → выход
while i <= 4:
total += i
i += 1
print(total) # 10
Такое пошаговое «прокручивание» — отличный навык для отладки. Возьмите любой цикл и пройдите по нему вручную, отслеживая значения переменных.
Проверь себя
Сколько раз выполнится тело цикла?
n = 10
while n > 0:
n -= 3
Шаги: 10 → 7 → 4 → 1 → -2 (условие > 0 ложно). Тело выполнится 4 раза.
Итог
while условие:повторяет тело, пока условиеTrue.- Перед каждой итерацией Python проверяет условие. Если ложно с самого начала — тело не выполняется.
- В теле обязательно должно изменяться что-то, влияющее на условие — иначе получится бесконечный цикл.
whileподходит для: ввода пользователя с повтором, алгоритмов с неизвестным числом шагов, флаговых паттернов.- Управление флагом (
is_running = True/False) делает намерение цикла явным.
В следующем уроке познакомимся с циклом for — более компактным способом перебирать последовательности.