← назад к разделу

Любой тест сводится к одному: сравнить то, что ожидали, с тем, что получилось. Сравнения и условия — та часть языка, которая это и делает.

проверки идут сверху вниз, срабатывает первая подошедшая if код == 200 elif код == 404 else «успех» «не найдено» «неожиданный код» последняя ветка ловит то, чего не ждали

Значение проходит проверки по очереди: сработала первая подходящая — остальные пропускаются.

Сравнение даёт «да» или «нет»

живой пример

код = 200
print(код == 200)     # True
print(код == 404)     # False
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Два знака равенства == — это вопрос «равно ли?», один = — «положи значение». Проговорите вслух: один — кладу, два — спрашиваю.

Операторы сравнения:

живой пример

a, b = 200, 404
print(a == b)     # False — равно?
print(a != b)     # True  — не равно?
print(a > b)      # False — больше?
print(a < b)      # True  — меньше?
print(a >= b)     # False — больше или равно?
print(a <= b)     # True  — меньше или равно?
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Результат всегда True или False. Эти значения называют логическими, и они пишутся с большой буквы — true с маленькой Python не знает.

Отработать здесь: Сравнить ожидаемое с фактическим

Условие: сделать одно или другое

живой пример

код = 404

if код == 200:
    print("Всё хорошо")
else:
    print("Что-то пошло не так")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Отступ здесь — часть языка. То, что относится к if, сдвигается вправо на четыре пробела. Сдвинули не так — программа либо упадёт с IndentationError, либо сделает не то.

Веток может быть больше двух — тогда посередине elif (сокращение от «else if»):

живой пример

код = 500
if код == 200:
    print("Успех")
elif код == 404:
    print("Не найдено")
elif код == 500:
    print("Ошибка на сервере")
else:
    print(f"Неожиданный код: {код}")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

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

Отработать здесь: Условие if и else

Несколько условий сразу

живой пример

код, сумма, найден = 200, 4990, False

if код == 200 and сумма > 0:
    print("Заказ создан и не пустой")

if код == 404 or код == 410:
    print("Заказа нет")

if not найден:
    print("Не нашли")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

  • and — истина, когда истинны оба условия;
  • or — когда истинно хотя бы одно;
  • not — переворачивает: было True, стало False.

Вторую половину or часто не дописывают — и ветка начинает срабатывать всегда:

живой пример

код = 200

# так не надо: 410 — не сравнение, а число, и Python считает его истиной
if код == 404 or 410:
    print("заказа нет")

# так надо: сравнение пишут целиком для каждого значения
if код == 404 or код == 410:
    print("заказа нет")
else:
    print("заказ на месте")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Первый if печатает «заказа нет» даже при коде 200 — проверка, которая всегда верна, не проверяет ничего.

and считается раньше or, поэтому в смешанном условии ставят скобки: (код == 404 or код == 410) and not найден.

Отработать здесь: Несколько веток по коду ответа

Что считается «пустым»

В условие можно поставить не только сравнение, но и само значение. Пустое считается ложью, непустое — истиной:

живой пример

ответ = ""
список = []

if not ответ:
    print("строка пустая")
if not список:
    print("список пуст")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Ложью считаются 0, пустая строка "", пустой список [], пустой словарь {} и None — особое значение «ничего нет». Всё остальное — истина.

None — это не ноль и не пустая строка, а «значения нет вовсе»: так выглядит поле ответа, которое не заполнено. Сравнивают его отдельным оператором:

живой пример

дата_оплаты = None
if дата_оплаты is None:
    print("Заказ не оплачен")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

is None, а не == None — так принято и так надёжнее.

Как это выглядит в проверке

живой пример

ожидаемый = 200
фактический = 404

if фактический == ожидаемый:
    print("OK")
else:
    print(f"FAIL: ожидали {ожидаемый}, получили {фактический}")
Запустить

Запуск примеров доступен в платном доступе. Там этот же код выполняется прямо в статье: редактор, запуск и проверка рядом с абзацем. Три дня бесплатно →

Это уже проверка, только записанная вручную: в тесте вместо if пишут assert, и сообщение об ошибке язык собирает сам — об этом статья assert и ошибки.

Отработать здесь: Проверить номер заказа

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

Забыли двоеточие в конце строки с if — SyntaxError. Двоеточие обязательно, оно открывает блок.

Сравнили строку с числом: "200" == 200 всегда False. Приведите к одному типу — int(код) == 200.

Написали = вместо ==: внутри if Python отвечает SyntaxError, а в обычной строке молча запишет значение вместо того, чтобы сравнить.

Коротко

  • = кладёт значение, == спрашивает «равно ли»; результат сравнения — True или False.
  • if / elif / else выбирает ветку; срабатывает первая подошедшая, else ловит остальное — без него неожиданный ответ проходит молча.
  • Отступ в четыре пробела — часть языка, а не оформление.
  • and, or, not соединяют условия, и сравнение после or пишут целиком: код == 404 or код == 410.
  • Пустая строка, пустой список, 0 и None считаются ложью; «значения нет» проверяют через is None.

Что почитать дальше