Модуль 3 · Списки и циклы

Справочник по Python · модуль 3 · списки и циклы

Глава 3.2

3.2

Цикл while
с предусловием

while повторяет блок, пока условие остаётся истинным. Такой цикл нужен, когда количество повторений заранее неизвестно.

Категория
Циклы и управление выполнением
Уровень
Начальный
Связанные темы
Условия, break, continue
Зачем это знать
Повторять действия до изменения условия

§1Что делает while

Цикл повторяет один блок кода несколько раз. В конструкции while повторение продолжается, пока условие даёт True.

Pythonобщая форма
while условие:
    тело_цикла

После условия ставится двоеточие, а тело цикла записывается с отступом. Строки без этого отступа выполняются уже после завершения цикла.

§2Проверка перед каждым повтором

while называют циклом с предусловием, потому что условие проверяется до входа в тело — в том числе перед самым первым повтором.

  1. Python вычисляет условие после while.
  2. Если результат True, выполняется всё тело цикла.
  3. После тела программа возвращается к условию и вычисляет его заново.
  4. Если результат False, цикл заканчивается.
Ноль повторений — тоже результат

Если условие ложно при первой проверке, тело while не выполнится ни разу.

§3Цикл со счётчиком

main.pyчисла от 1 до 5
number = 1

while number <= 5:
    print(number)
    number += 1
Выводпять повторений
1
2
3
4
5

Переменная number начинается с 1. В конце каждого повторения она увеличивается, поэтому после вывода числа 5 условие становится ложным.

§4Когда число повторений неизвестно

Один из типичных сценариев — принимать значения, пока пользователь не введёт специальный сигнал завершения. В примере таким сигналом служит ноль.

main.pyсумма и количество до нуля
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 немедленно завершает ближайший цикл независимо от его условия.

main.pyостановка на числе 5
number = 1

while True:
    print(number)

    if number == 5:
        break

    number += 1
Выводbreak завершил цикл
1
2
3
4
5

§7Пропуск шага: continue

continue прекращает только текущее повторение и сразу возвращает программу к следующей проверке условия.

main.pyчисло 3 пропущено
number = 0

while number < 5:
    number += 1

    if number == 3:
        continue

    print(number)
Выводбез числа 3
1
2
4
5

Счётчик увеличивается до continue. Если перенести number += 1 ниже, то при значении 3 программа будет бесконечно пропускать строку увеличения.

§8Блок else у цикла

else после while выполняется при обычном завершении: когда условие стало ложным. Если цикл прерван через break, блок else пропускается.

main.pyусловие стало ложным
number = 1

while number <= 3:
    print(number)
    number += 1
else:
    print("Цикл завершён без break")
Выводelse выполнился
1
2
3
Цикл завершён без break

§9Квадраты до границы

Задача: вывести квадраты натуральных чисел, которые не превышают заданное значение.

main.pyдля границы 30
limit = 30
number = 1

while number * number <= limit:
    print(number * number)
    number += 1
Выводследующий квадрат уже больше 30
1
4
9
16
25

§10Анализ цифр числа

Задача: узнать, сколько раз в натуральном числе встречается цифра 3 и сколько раз повторяется его последняя цифра.

main.pyперебор цифр справа налево
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)
Выводnumber = 31333
Цифр 3: 4
Последняя цифра встречается: 4

Выражение number % 10 получает последнюю цифру, а number //= 10 удаляет её. Без удаления цифры условие number > 0 не изменялось бы.

§11while или for

ЦиклКогда выбиратьПример задачи
whileзавершение зависит от условия, число повторений заранее неизвестночитать числа до ввода нуля
forнужно перебрать готовую последовательность значенийобработать каждый символ строки

Следующая глава подробно разбирает цикл for. Многие задачи можно решить обоими способами, но подходящий цикл делает условие завершения заметнее.

§12Частые ошибки

Что написаноЧто произойдётКак правильно
while number < 5SyntaxError: нет двоеточия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: action
Завершить циклbreak
Пропустить шагcontinue
Обычное завершениеwhile ...: ...else:

Итог главы

while проверяет условие перед каждым повторением и работает, пока оно истинно. Чтобы цикл завершился, его условие должно измениться или должен выполниться break. continue пропускает один шаг, а else отмечает завершение без break.

Глава 3.2 · Цикл while с предусловием · Справочник по Python Автор: Макаров Максим Николаевич