PythonPython 2. Условия0%
Python для ЕГЭ · тема 2 из 11

Условия

Учим программу выбирать, что делать. if, сравнения, and и or, отступы. Половина ошибок на ЕГЭ живёт именно в условиях, поэтому тут много ловушек.

6 разделов~35 минут№2, 5, 8, 15 и не только
  1. 1if и else
  2. 2Сравнения
  3. 3elif и границы
  4. 4and, or, not
  5. 5Сломай код
  6. 6Где пригодится на ЕГЭ
Раздел 1 из 6

if и else

До сих пор программа выполняла все строки подряд. if позволяет выполнить кусок кода только когда условие верно.

python
n = int(input())
if n % 2 == 0:
    print(n, 'чётное')
else:
    print(n, 'нечётное')
print('Готово')
Ввод

Поменяй 14 на 7 и запусти ещё раз. Устроено так:

Отступы

В Python отступ это не украшение. Именно по нему Python понимает, где кончается if. Отступ всегда 4 пробела. В редакторе на сайте и в IDLE клавиша Tab ставит их сама.

else можно не писать, если в противном случае делать ничего не надо:

python
x = int(input())
if x < 0:
    x = -x          # меняем знак, если число отрицательное
print('Модуль:', x)
Ввод
Раздел 2 из 6

Сравнения

ЗнакЗначит
==равно
!=не равно
< >меньше, больше
<= >=меньше или равно, больше или равно

Главное: равно пишется двумя знаками ==. Один знак = это «положи в переменную», про это была тема 1.

Результат сравнения это True (правда) или False (ложь). Его можно просто вывести:

python
x = 7
print(x > 5)
print(x == 10)
print(x != 10)

В Python есть удобная запись двойного неравенства, как в математике:

python
x = 7
print(1 <= x <= 10)    # x от 1 до 10 включительно

True и False ведут себя как числа 1 и 0. Это пригодится в №2, где таблицы истинности пишут нулями и единицами:

python
print(True + True)
print(int(5 > 3))
Раздел 3 из 6

elif и границы

Когда вариантов больше двух, между if и else ставят elif (сокращение от else if). Python проверяет условия сверху вниз и выполняет только первый подходящий блок.

python
score = int(input())   # баллы за пробник
if score >= 80:
    print('Оценка 5')
elif score >= 60:
    print('Оценка 4')
elif score >= 40:
    print('Оценка 3')
else:
    print('Оценка 2')
Ввод

Попробуй ввести 79, 80 и 39. Почему во второй строке достаточно score >= 60, без «и меньше 80»? Потому что до elif дело дойдёт, только если первое условие уже не сработало. Значит, тут точно score < 80.

Ловушка: порядок elif

Если поставить score >= 40 первым, то 95 баллов получат оценку 3: условие верное, блок выполнится, а до остальных Python даже не дойдёт. Идём от самого строгого условия к самому слабому.

Противоположное условие

Что противоположно x < 40? Хочется сказать x > 40, но тогда потеряется само 40. Правильно x >= 40.

УсловиеПротивоположное
x < 40x >= 40
x > 40x <= 40
x == 40x != 40

На ЕГЭ это всплывает в формулировках «не меньше», «не больше», «больше». «Не меньше 40» значит >= 40, сорок подходит.

Попробуй самучебная задача

Что выведет программа?

python
a = 17
b = 5
if a % b == 0:
    print(a // b)
elif a > 10:
    print(a - b)
else:
    print(a + b)
Подсказка

Сначала реши в голове, потом скопируй код в любой блок выше и проверь.

Раздел 4 из 6

and, or, not

Условия можно соединять:

PythonЗначитВерно, когда
a and bиверны оба
a or bиливерно хотя бы одно
not aнеa ложно
python
n = int(input())
if n % 3 == 0 and n % 5 == 0:
    print('делится и на 3, и на 5')
if n % 3 == 0 or n % 5 == 0:
    print('делится хотя бы на одно из них')
if not n % 2 == 0:
    print('нечётное')
Ввод

Поиграй с вводом: 15, 9, 7, 10.

Скобки

Python выполняет сначала not, потом and, потом or. Это как умножение раньше сложения. Если в условии есть и and, и or, ставь скобки, даже если и так работает: так и тебе понятнее, и ошибиться сложнее.

Классический пример: високосный год. Год високосный, если делится на 4 и не делится на 100, или если делится на 400.

python
y = int(input())
if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
    print(y, 'високосный, 366 дней')
else:
    print(y, 'обычный, 365 дней')
Ввод

Проверь 2024, 2100 и 2000.

Попробуй самучебная задача

Сколько дней в 1900 году? Запусти код про високосный год.

Попробуй самучебная задача

Что выведет print(int((3 <= 5) and not (2 == 2)))? Ответ 0 или 1.

Раздел 5 из 6

Сломай код

Первые три ошибки Python найдёт сам. Последние две он не заметит, и это хуже: программа работает, но ответ неверный.

Один знак равно

python
x = 5
if x = 5:
    print('пять')

SyntaxError. В условии нужно ==. Python 3 обычно сам подсказывает это в сообщении.

Забытое двоеточие

python
x = 5
if x > 0
    print('положительное')

expected ':', то есть ждал двоеточие. Двоеточие нужно после if, elif и else.

Нет отступа

python
x = 5
if x > 0:
print('положительное')

expected an indented block: после двоеточия Python ждёт хотя бы одну сдвинутую строку.

Тихая ошибка: or без второго сравнения

python
x = 7
if x == 1 or 2:
    print('x это 1 или 2')

Хотели проверить «x равно 1 или 2», а условие сработало для 7. Python читает это как (x == 1) or 2, а число 2 само по себе считается правдой. Правильно так:

python
x = 7
if x == 1 or x == 2:
    print('x это 1 или 2')
else:
    print('нет')

Тихая ошибка: print не в том блоке

python
x = int(input())
if x > 10:
    print('большое')
    print('проверка закончена')
Ввод

Строка «проверка закончена» должна выводиться всегда, но она сдвинута и попала внутрь if. При вводе 3 программа молчит. Убери у последней строки отступ и запусти снова.

Привычка

Тихие ошибки ловятся только проверкой на нескольких входах. Подставь число, где условие должно сработать, число, где не должно, и число ровно на границе.

Раздел 6 из 6

Где пригодится на ЕГЭ

НомерЧто из темы
№2and, or, not, сравнения как 0 и 1, скобки
№15длинные логические выражения, проверка для каждого x
№5«если число чётное, то…»: if n % 2 == 0
№8условия на слово внутри if
№25несколько условий делимости через and

В №2 и №15 есть ещё две логические операции, которых в Python нет отдельным словом. Их записывают через сравнение:

ЛогикаPython
a → b (следование)a <= b
a ≡ b (равносильность)a == b

Почему следование это <=, разберём в уроке по №2. Пока просто запомни, что это стандартный приём.

python
x, y = 1, 0
print(int(x <= y))    # 1 → 0 даёт 0, единственный ложный случай
print(int(y <= x))    # 0 → 1 даёт 1
Попробуй самучебная задача

Чему равно выражение (x → y) ∧ ¬z при x = 0, y = 0, z = 0? Ответ 0 или 1.

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