ИНФОРМАТИКА · 1–2 ЗАНЯТИЯ

Цикл while в Python

Теория и практика для 10 класса

Разберитесь, как работает цикл, и сразу проверьте свои решения.

К теории Перейти к заданиям ↗
ПОВТОРЯЕМ, ПОКА УСЛОВИЕ ИСТИННО
n = 1
while n <= 5:
    print(n)
    n += 1
вывод 1   2   3   4   5

01 / РАЗБИРАЕМСЯ

Как работает while

Сначала условие. Затем действие.

01

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

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

while условие:
    команда_1
    команда_2

После условия ставится двоеточие. Отступ объединяет команды в тело цикла: обычно это четыре пробела. Команда без отступа после тела выполняется уже после завершения цикла. Не смешивайте пробелы и табуляцию.

n = 1
while n <= 5:
    print(n)
    n += 1
РЕЗУЛЬТАТ
1
2
3
4
5

Сначала n = 1. Проверяем n <= 5: это True. Выводим n, увеличиваем его на 1 и возвращаемся к проверке. Так выводятся числа от 1 до 5. При n = 6 условие становится False, и цикл прекращается.

Важно: условие должно когда-нибудь стать ложным

В этом примере n не меняется. Программа будет печатать 1 бесконечно:

n = 1
while n <= 5:
    print(n)

В заданиях такой запуск автоматически остановится. В обычной программе нужно исправить условие или изменение переменной.

Обратный отсчёт

n = 5
while n > 0:
    print(n)
    n -= 1
print("Старт!")

На экране появятся 5, 4, 3, 2, 1 и «Старт!». Последняя команда находится вне цикла и выполнится один раз.

02

Составной оператор присваивания

Для чисел запись x += 1 означает то же, что x = x + 1: увеличить x на единицу и сохранить результат в x.

x += 1   # x = x + 1
x -= 1   # x = x - 1
x *= 2   # x = x * 2
x /= 2   # x = x / 2 (обычное деление)
x //= 2  # x = x // 2 (целочисленное деление)
x %= 2   # x = x % 2 (остаток)
x **= 2  # x = x ** 2 (степень)

В циклах особенно часто встречаются += и -=: они изменяют счётчик или приближают завершение цикла.

i = 0
while i < 5:
    print(i)
    i += 1

Здесь выводятся числа от 0 до 4. Число 5 уже не удовлетворяет условию i < 5.

03

Подсчёт подходящих элементов

Счётчик хранит количество найденных элементов. До цикла задаём count = 0. Для каждого подходящего элемента выполняем count += 1.

count = 0
n = int(input())
while n != 0:
    if n > 0:
        count += 1
    n = int(input())
print(count)

Ноль завершает ввод и не является обычным элементом последовательности. Счётчик увеличивается только для положительных чисел.

Трассировка: ввод 4, −2, 7, 0

Введено nДействиеcount
4Положительное → +11
−2Пропускаем1
7Положительное → +12
0Выходим из цикла2
Обрати внимание

Новое число читается на каждой итерации, даже если оно отрицательное. Поэтому второй input() находится вне if, но внутри while.

04

Сигнал остановки

Если количество данных заранее неизвестно, выбирают специальное завершающее значение — сигнал остановки. Например, ноль для чисел или пустую строку для текста.

n = int(input())
while n != 0:
    print(n)
    n = int(input())

Ту же идею можно записать с помощью бесконечного цикла и явного выхода:

while True:
    n = int(input())
    if n == 0:
        break
    print(n)

break немедленно завершает ближайший цикл. Проверка стоит перед print(), поэтому ноль не выводится. Значение-сигнал обычно не включают в вычисления, если условие задачи не требует обратного.

05

Поиск минимума и максимума

Храните лучший результат из уже прочитанных элементов. Начальное значение максимума удобно взять из первого реального элемента. Искусственное число вроде −1000000000 может оказаться больше всех входных чисел и дать неверный ответ.

n = int(input())
maximum = n
n = int(input())
while n != 0:
    if n > maximum:
        maximum = n
    n = int(input())
print(maximum)
Условие этого примера

До завершающего нуля обязательно есть хотя бы одно число. Для пустой последовательности максимум не определён — такой случай нужно обрабатывать отдельно.

Для минимума идея та же: храним minimum и обновляем его, если n < minimum.

Как найти второй максимум?

Храните maximum и second_maximum. Если пришёл новый максимум, прежний переходит на второе место. Иначе сравните число со вторым максимумом. Начальные значения можно получить из первых двух элементов.

Например, после 5 и 2 храним (5, 2). Приходит 4 → (5, 4), затем 8 → (8, 5). Второй максимум равен 5. В практическом задании наибольший элемент встречается один раз.

06

Моржовый оператор :=

Оператор := появился в Python 3.8. Он позволяет присвоить значение переменной прямо внутри выражения.

Обычная запись

s = input()
while s != "":
    print(len(s))
    s = input()

Запись с :=

while (s := input()) != "":
    print(len(s))

Сначала выполняется input(), затем его результат присваивается s и сразу сравнивается с пустой строкой. Скобки показывают нужный порядок действий.

Необязательно писать короче

Для начинающих обычная запись часто проще и понятнее. Любой из этих вариантов подходит для практики.

07

Алгоритм Евклида

НОД — наибольший общий делитель: самое большое положительное число, на которое оба числа делятся без остатка. Для положительных целых a и b можно повторять замену пары на b и остаток от деления a на b.

a = int(input())
b = int(input())
while b != 0:
    a, b = b, a % b
print(a)

В строке присваивания сначала вычисляется вся правая часть со старыми значениями a и b, а затем обновляются обе переменные.

aba % bНовая пара
481812(18, 12)
18126(12, 6)
1260(6, 0)

Общие делители пары не меняются при замене a на остаток a % b. Остатки уменьшаются, пока очередной не станет нулём. Тогда b = 0, цикл завершается, а a содержит НОД. Для 48 и 18 ответ — 6.

02 / ПИШЕМ КОД

Практика

«Запустить на примере» выполняет код на первом примере задания. «Проверить» проверяет решение на нескольких тестах. После трёх неверных проверок можно открыть разбор.

Загружаем редакторы…

ЦИКЛ WHILE · PYTHON

Войти как…

Выберите свою роль, чтобы начать урок.