Перейти к содержанию
Educora
Средний8 класс24 мин30 / 59

Условный оператор: if, elif, else и составные условия

Операции сравнения, полная и неполная форма `if`, цепочки `elif`, вложенные условия, `and`, `or`, `not` и условия с остатками — с экзаменационными задачами на трассировку, «сколько раз `Yes`?» и письменными программами.

Проверь себя
В этом уроке ты узнаешь
  • Определять результат (True / False) операций сравнения, в том числе сравнения строк.
  • Записывать полную и неполную форму if, цепочки elif и вложенные условия и прослеживать, какая ветвь выполняется.
  • Вычислять составные условия с and, or, not с учётом приоритета.
  • Писать программы, решающие задачи с периодическим узором через условия с остатком (n % k).

Банкомат выдаёт деньги, если PIN-код набран верно, и предупреждает, если неверно; на светофоре мы идём на зелёный и стоим на красный. Программа тоже должна выбирать, что делать, в зависимости от ситуации. На блок-схеме это ветвление, изображаемое ромбом (см. «Алгоритмы и блок-схемы» и «Разветвляющиеся алгоритмы»), а в Python оно записывается условным оператором if. В каждом варианте вступительных экзаменов 2025–2026 годов на условный оператор приходилось 2–3 задания, иногда одно из них было письменной программой.

Операции сравнения: когда условие истинно?

Условие — выражение, значение которого True (истина) или False (ложь). Простейшие условия строятся с помощью операций сравнения. Внимание: равенство записывается двумя знаками — ==, потому что одиночный = означает присваивание.

ОперацияСмыслПример
==равно7 == 7 → True
!=не равно7 != 7 → False
< >меньше, больше3 > 8 → False
<= >=меньше или равно, больше или равно8 >= 8 → True

Строки сравниваются посимвольно, по кодам символов — как слова в словаре: 'apple' < 'apricot' истинно, потому что в третьем символе p идёт раньше r. Коды заглавных букв меньше кодов строчных, поэтому 'Z' < 'a' тоже истинно. Строки из цифр тоже сравниваются посимвольно: '10' < '9' истинно ('1' < '9'), хотя 10 > 9. Число никогда не равно строке: 5 == '5' → False. Python допускает и двойные неравенства: запись 10 <= n <= 99 означает «n — двузначное число».

Значение условия — обычное значение: его можно напечатать (print(7 > 3) → True) и сохранить в переменной: even = n % 2 == 0. Здесь сначала вычисляется сравнение n % 2 == 0, затем True или False присваивается переменной even; после этого достаточно написать if even:. Если разбить длинное условие на такие части, программа читается легче.

Полная и неполная форма условного оператора

Определение
Неполная и полная форма ветвления

Неполная форма состоит только из if: если условие истинно, блок выполняется, если ложно — ничего не происходит. Полная форма — if … else: всегда выполняется ровно одна из двух ветвей — блок if при истинном условии и блок else при ложном.

Правила записи: после условия ставится двоеточие (:), а команды ветви пишутся с отступом — обычно 4 пробела. Подряд идущие строки с одинаковым отступом образуют блок: закончился отступ — закончился и блок. else пишется с тем же отступом, что и его if. Команды после условного оператора без отступа выполняются в обоих случаях.

Python
n = 38
if n % 5 == 3:
    print(n // 5)
else:
    print(n % 5)
print('end')
▸ Ожидаемый результат
7
end
38 % 5 = 3, условие истинно, и печатается 38 // 5 = 7. print('end') без отступа, поэтому выполняется в любом случае. Поставь n = 41 и запусти снова: на этот раз сработает ветвь else.
Python
x = 12
y = 5
if x % y == 2:
    y = x * 2
    print(x, y)
    x = y - x
y = y + 1
print(x, y)
▸ Ожидаемый результат
12 24
12 25
Программа примера 1.
Пример 1. Команды после условия (кодированный ответ)

Что выведет программа выше? Запишите обе строки.

Показать решение
x % y = 12 % 5 = 2, условие истинно, блок выполняется:
y = 12 · 2 = 24; print(x, y) → 12 24; x = 24 − 12 = 12.
После блока идут команды без отступа: y = 24 + 1 = 25; print(x, y) → 12 25.
Ответ — две строки: 12 24 и 12 25. Ловушка: кто считает y = y + 1 без отступа с начальным y = 5, пишет «12 6».

Цепочки elif и вложенные условия

Когда вариантов больше двух, используют elif («else if» — «иначе, если»). Условия проверяются сверху вниз; выполняется ветвь первого истинного условия, а остаток цепочки пропускается — даже если следующие условия тоже истинны. Если ни одно условие не истинно, выполняется заключительный else (если его нет — ничего). Поэтому важен порядок условий: если if n > 10 стоит раньше elif n > 100, вторая ветвь никогда не выполнится.

условие 1истинно?даветвь 1нетусловие 2истинно?даветвь 2нетветвь elseследующаякоманда
Цепочка if … elif … else: условия проверяются сверху вниз, выполняется ветвь первого истинного условия, затем программа переходит к команде после цепочки.
Python
s = 'k'
b = 'm'
if s == b:
    print('A')
elif s < b:
    print('B')
elif s == 'k':
    print('C')
else:
    print('D')
▸ Ожидаемый результат
B
Программа примера 2. На экзамене первая строка — s = input().
Пример 2. Вводится символ

Что выведет программа выше, если с клавиатуры введена буква k?
A) A B) B C) C D) D E) ничего

Показать решение
s == b → 'k' == 'm' ✗.
s < b → 'k' < 'm' ✓ (в алфавите k стоит раньше m) → печатается B.
Остаток цепочки не проверяется, хотя s == 'k' тоже было истинно. Ответ: B.

Внутри ветви может стоять ещё один условный оператор — это вложенное условие. Внутренний if проверяется, только если истинно внешнее условие. Какой else к какому if относится, определяет только отступ: else относится к ближайшему if выше с тем же отступом. В экзаменационных программах условия часто вложены на 2–3 уровня, поэтому прослеживай их по системе.

  1. 1
    Запиши начальные значения

    Перенеси переменные и их начальные значения (вместе с вводом) в таблицу.

  2. 2
    Вычисли условие: ✓ или ✗

    Вычисли условие по текущим значениям и поставь рядом ✓ (истина) или ✗ (ложь).

  3. 3
    Если ✗, пропусти блок

    Пропусти все строки с бо́льшим отступом и перейди к elif / else с тем же отступом, а если его нет — к строке после блока.

  4. 4
    Если ✓, войди в блок

    Выполни команды, обнови переменные и повтори шаги 2–3 для внутренних условий. Если ветвь выполнена, остальные elif / else этой цепочки пропускаются.

  5. 5
    Не забудь команды после него

    Строки без отступа после условного оператора выполняются всегда — ответ часто получается именно там.

Python
a = 36
b = 14
if a % b > 5:
    a = a - b
    if a > 2 * b:
        b = b + 3
    else:
        b = b - 3
        if b % 2 == 1:
            a = a + 1
else:
    a = a + b
print(a + b, a - b)
▸ Ожидаемый результат
34 12
Программа примера 3: условия с тремя уровнями вложенности.
Пример 3. Закрытое задание в стиле экзамена: вложенные условия

Определите результат программы выше.
A) 39 5 B) 33 11 C) 34 12 D) 58 14 E) 22 11

Показать решение
1) a % b = 36 % 14 = 8; 8 > 5 ✓ → a = 36 − 14 = 22.
2) a > 2 · b → 22 > 28 ✗ → ветвь else: b = 14 − 3 = 11.
3) Внутреннее условие: b % 2 == 1 → 11 % 2 = 1 ✓ → a = 22 + 1 = 23.
4) Внешний else пропускается. print(a + b, a - b) → 23 + 11 = 34, 23 − 11 = 12.
Ответ: C) 34 12. Вариант B — для тех, кто забыл внутренний if (a = 22, b = 11), A — для выбравших не ту ветвь (b = 17).

Составные условия: and, or, not

Несколько условий соединяются логическими операциями: and (и) истинно, когда истинны оба условия; or (или) — когда истинно хотя бы одно; not (не) меняет значение условия на противоположное. Это конъюнкция, дизъюнкция и инверсия из урока «Логические операции и логические элементы».

ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue
арифметика → == != < > <= >= → not → and → or

Приоритет убывает слева направо: сначала арифметика, затем сравнения, потом not, and и в самом конце or. Сомневаешься — ставь скобки: программа станет и правильной, и понятной.

Готовые шаблоны для промежутков: x принадлежит отрезку [10; 20] — 10 <= x <= 20 (то есть x >= 10 and x <= 20); x вне отрезка — x < 10 or x > 20, что то же самое, что not (10 <= x <= 20). Осторожно: and в условии «вне отрезка» — ошибка: ни одно число не может быть одновременно меньше 10 и больше 20, такое условие всегда ложно.

Пример 4. Приоритет имеет значение

При x = 7, y = 2 вычислите: 1) x > 5 or y > 3 and x < 0; 2) not x > 5 and y == 2; 3) (x > 5 or y > 3) and x < 0.

Показать решение
1) Сначала and: y > 3 and x < 0 → ✗ и ✗ = False; затем x > 5 or False → ✓ или ✗ = True.
2) not выполняется после сравнения, но до and: not (7 > 5) = not True = False; False and … = False.
3) Сначала скобки: x > 5 or y > 3 = True; True and x < 0 = ✓ и ✗ = False.
Выражения 1 и 3 отличаются только скобками, а результаты противоположны.
Пример 5. Сколько раз будет напечатано «Yes»?

Программа выполняется 10 раз подряд, и каждый раз с клавиатуры вводится пара (s, t): (9, 4); (9, 6); (2, 5); (−1, 3); (8, 8); (0, 0); (12, 9); (−5, −5); (7, 1); (10, 11). Сколько раз будет напечатано Yes? (В азербайджанских заданиях обычно печатаются слова «Bəli» / «Xeyr» — «да» / «нет».)
s = int(input())
t = int(input())
if s >= 8 and t % 3 != 0 or s < 0:
    print('Yes')
else:
    print('No')

Показать решение
Так как and выполняется раньше or, условие читается как (s >= 8 and t % 3 != 0) or s < 0.
• Пары с s < 0 сразу дают Yes: (−1, 3), (−5, −5) — 2 пары.
• Для остальных нужно s ≥ 8, и t не должно делиться на 3: (9, 4) ✓, (9, 6) ✗ (6 % 3 = 0), (8, 8) ✓, (12, 9) ✗ (9 % 3 = 0), (10, 11) ✓ — 3 пары.
• В (2, 5), (0, 0), (7, 1) s < 8 → No.
Всего: 2 + 3 = 5.
Python
pairs = [(9, 4), (9, 6), (2, 5), (-1, 3), (8, 8),
         (0, 0), (12, 9), (-5, -5), (7, 1), (10, 11)]
count = 0
for s, t in pairs:
    if s >= 8 and t % 3 != 0 or s < 0:
        count = count + 1
print(count)
▸ Ожидаемый результат
5
Проверка: здесь цикл for (следующий урок) проверяет то же условие для каждой из 10 пар и считает ответы Yes.
Python
x = 3
y = 5
if x * y > 15:
    print('#')
elif y ** x != 125:
    print('# #')
else:
    print('# # # #')
if y // x == 1:
    print('# # #')
▸ Ожидаемый результат
# # # #
# # #
Программа примера 6.
Пример 6. Считаем напечатанные символы

Сколько символов # будет напечатано после выполнения программы выше?
A) 1 B) 3 C) 4 D) 7 E) 10

Показать решение
Первый условный оператор: x · y = 15, 15 > 15 ✗; elif: 5 ** 3 = 125, 125 != 125 ✗ → else: # # # # (4 символа).
Второй, отдельный if: y // x = 5 // 3 = 1, 1 == 1 ✓ → # # # (3 символа).
Всего D) 7. Второй if — самостоятельный оператор и проверяется независимо от результата первого.

Условия с остатком и письменное задание

Самые любимые условия экзамена строятся на остатках. Их нужно узнавать с первого взгляда:

  • n % 2 == 0 — n чётное; n % 2 == 1 — n нечётное;
  • n % k == 0 — n делится на k; n % k != 0 — не делится;
  • n % 10 == 7 — последняя цифра 7; n // 10 % 10 == 3 — цифра десятков 3;
  • n % 3 == 0 and n % 5 == 0 — n делится на 15;
  • периодический узор: если что-то повторяется каждые k шагов, n % k показывает место n в узоре.

Применим последнюю идею в письменном задании. Натуральные числа записаны в таблицу из 4 столбцов «змейкой»: в нечётных строках слева направо, в чётных — справа налево.

ABCD
1234
8765
9101112
16151413
…………
Пример 7. Письменное задание: в каком столбце число?

Напишите на Python программу, которая определяет, в каком столбце таблицы выше находится введённое с клавиатуры натуральное число n (1 ≤ n ≤ 1000). Например: ввод 6 → вывод C; 13 → D; 16 → A; 26 → B.

Показать решение
1) Узор повторяется каждые 8 чисел (две строки = 8 клеток), поэтому смотрим на остаток r = n % 8.
2) По первым двум строкам определяем место каждого остатка: r = 1 → A, 2 → B, 3 → C, 4 → D, 5 → D, 6 → C, 7 → B, 0 → A (8, 16, 24, … стоят в столбце A).
3) Группируем: A — r = 0 или 1; B — 2 или 7; C — 3 или 6; D — оставшиеся 4 и 5.
4) Превращаем это в цепочку if … elif … else (программа ниже). Проверка: 26 % 8 = 2 → B ✓, 13 % 8 = 5 → D ✓.
Python
n = 26
r = n % 8
if r == 0 or r == 1:
    print('A')
elif r == 2 or r == 7:
    print('B')
elif r == 3 or r == 6:
    print('C')
else:
    print('D')
▸ Ожидаемый результат
B
Решение письменного задания. В бланке ответа первая строка должна быть n = int(input()); здесь стоит n = 26, чтобы программа работала в браузере. Проверь также 6, 13 и 16.

В письменном задании пишется полная программа: ввод (int(input())), вычисление (здесь остаток и условия) и вывод (print). ГЭЦ не публикует критерии оценки письменных заданий, поэтому пиши каждую часть ясно и проверяй программу шаг за шагом на всех случаях из таблицы примеров и на «граничных» значениях (здесь на числах с остатком 0, таких как 8 и 16).

Задание

Светофор работает циклично: в каждых 60 секундах первые 30 секунд горит зелёный (green), следующие 5 — жёлтый (yellow), оставшиеся 25 — красный (red); отсчёт начинается с 0-й секунды. Напиши if … elif … else, чтобы программа выводила цвет для каждого момента (цикл for по заданным моментам уже готов).

Задание · Python
for t in [10, 33, 50, 1000, 1234]:
    r = t % 60
    colour = '?'
    # choose the colour with if / elif / else
    print(t, colour)
▸ Ожидаемый результат
10 green
33 yellow
50 red
1000 red
1234 yellow
Задание

Год високосный (366 дней), если он делится на 4, но не делится на 100, или если он делится на 400. Замени False в переменной leap этим составным условием, чтобы программа дала верный ответ для четырёх лет.

Задание · Python
for y in [2024, 2100, 2000, 2026]:
    leap = False  # write the condition here
    if leap:
        print(y, 'Yes')
    else:
        print(y, 'No')
▸ Ожидаемый результат
2024 Yes
2100 No
2000 Yes
2026 No

Главное

  • Условие — выражение со значением True или False: равенство ==, неравенство !=; строки сравниваются посимвольно по кодам ('10' < '9').
  • В неполном if ветвь может выполниться или нет; в полном if … else всегда выполняется ровно одна из двух ветвей. Блок определяется отступом.
  • В цепочке if … elif … else выполняется только ветвь первого истинного условия; отдельные if проверяются каждый сам по себе.
  • Приоритет: арифметика → сравнение → not → and → or; сомневаешься — ставь скобки.
  • Чётность, делимость и периодические узоры (столбцы, дни недели, светофор) разбиваются на ветви по остатку n % k.

Проверь себя

Вопросов: 12. Каждый правильный ответ приносит XP.

1 / 12
Какая операция в Python проверяет равенство двух значений?