Любой тест сводится к одному: сравнить то, что ожидали, с тем, что получилось. Сравнения и условия — та часть языка, которая это и делает.
Значение проходит проверки по очереди: сработала первая подходящая — остальные пропускаются.
Сравнение даёт «да» или «нет»
живой пример
код = 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.
Что почитать дальше
- Переменные и строки — из чего собирается то, что вы сравниваете.
- Списки и словари — где живут данные, которые вы проверяете.
- Циклы — как одну проверку прогнать по многим значениям.
- assert и ошибки — как из
ifполучается настоящий тест.