Цикл while
Чему вы научитесь:
- повторять код циклом
while, пока условие истинно; - предсказывать, сколько раз выполнится тело цикла и чему равен счётчик после него;
- перебирать числа через
forиrange, а черезforпо строке — её символы; - выходить из цикла через
break, пропускать круг черезcontinueи понимать веткуelseу цикла.

Чтобы сложить числа от 1 до 100, пришлось бы написать сто слагаемых подряд. Никто так не делает. Для повторяющихся действий есть цикл — конструкция, которая выполняет блок кода снова и снова.
Представьте беговую дорожку. На старте стоит табличка n = 1: бегун начинает с первого круга. Перед каждым кругом он проходит контрольную арку n <= 100. Если арка пропускает, бегун пробегает круг и отмечает его на счётчике кругов: n += 1.
Когда арка не пропускает, бег окончен, и бегун уходит с дорожки. Цикл while работает так же: он повторяет свой блок, пока его условие истинно. Вот сумма от 1 до 100:
total = 0
n = 1
while n <= 100:
total += n
n += 1
print(total) # 5050Давайте разберём программу по строкам:
total = 0готовит сумму.n = 1— табличка на старте: счёт начинается с единицы.while n <= 100:— контрольная арка перед каждым кругом.total += nприбавляет номер круга к сумме.n += 1отмечает круг на счётчике.print(total)выполняется после цикла и печатает5050.
Условие и счётчик
Строка while n <= 100: устроена как if: после условия стоит двоеточие, а тело цикла — блок с отступом под ней. Один проход тела называют итерацией.
Самое важное в while — порядок действий. Python проверяет условие перед каждой итерацией, а не после неё. Цикл заканчивается в тот момент, когда последнее изменение в теле сделало условие ложным. Поэтому после цикла в n лежит не 100, а 101: на значении 101 арка и закрылась.
Нажмите «Следующий шаг» и следите за n в строке while: цикл заканчивается при n, равной 4, хотя последний круг был третьим.
1total = 02n = 13while n <= 3:4 total += n5 n += 16print(total, n)
total = 0 готовит сумму.
Такие вопросы любят на собеседованиях: сколько раз выполнится тело и чему равен счётчик после цикла. Ответ всегда даёт одно правило: условие проверяется перед кругом.
Здесь аналогия с бегуном неточна. Бегун пробегает хотя бы один круг, а while проверяет условие ещё до первой итерации. Если условие ложно с самого начала, тело не выполнится ни разу: с n = 200 программа сразу напечатает 0.
Шаг не обязательно единица
Счётчик может меняться как угодно. Запись n //= 2 значит то же, что n = n // 2: число делится нацело, и результат записывается обратно. Так считают, сколько раз 100 нужно разделить нацело на 2, чтобы осталась 1:
n = 100
steps = 0
while n > 1:
n //= 2
steps += 1
print(steps) # 6По итерациям n принимает значения 50, 25, 12, 6, 3 и 1. При n, равной 1, условие n > 1 ложно, и цикл заканчивается после шести итераций.
Бесконечный цикл
Условие цикла while True: истинно всегда, поэтому сам такой цикл не заканчивается. Этот бесконечный цикл удобен внутри функции, когда заранее неизвестно, сколько понадобится итераций. Его прерывает return: он завершает функцию, а вместе с ней и цикл. Эта функция ищет первое число, квадрат которого больше limit:
def first_square_over(limit):
n = 1
while True:
if n * n > limit:
return n
n += 1
print(first_square_over(50)) # 8Разберём, что происходит при вызове first_square_over(50):
- Поиск начинается с
n = 1. - Для
nот1до7квадрат не больше50, и цикл идёт дальше. - При
n, равной8, квадрат равен64, иreturnвозвращает8.
Частая ошибка
В теле цикла забыли изменить счётчик:
i = 1
while i <= 3: # ✗
print(i)Переменная i всегда равна 1, условие всегда истинно, и программа печатает 1 без конца. Бегун крутится на дорожке, а счётчик кругов стоит на месте. На своём компьютере такую программу останавливает сочетание клавиш Ctrl+C, и трассировка заканчивается строкой:
KeyboardInterruptВ задачах курса бесконечный цикл останавливает ограничение по времени, и результатов проверок не будет. Добавьте i += 1 в конец тела, и цикл напечатает 1, 2 и 3.
Главное
whileповторяет тело, пока условие истинно, и проверяет его перед каждой итерацией.- Цикл заканчивается, когда изменение в теле сделало условие ложным: после
while n <= 100вnлежит101. - Если условие ложно с самого начала, тело не выполнится ни разу.
- Без изменения счётчика в теле цикл становится бесконечным.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.