Решение, по форме похожее на английскую фразу
if — первый инструмент, к которому тянется большинство программ. Он даёт коду выбирать один путь, когда условие истинно, и другой, когда нет. Python записывает это прямо:
Две строки, одно решение. Строка с if заканчивается двоеточием. Строка ниже с отступом — тело if, код, который выполняется, если условие истинно. Если бы hour был 15, тело было бы полностью пропущено, и ничего бы не напечаталось.
Отступы здесь — и есть структура. Python понимает, какие строки принадлежат if, по ведущим пробелам. Соглашение — четыре пробела на уровень; будь последователен.
Добавляем ветку else
Часто что-то должно произойти в любом случае: это — когда условие истинно, то — иначе. Для этого есть else:
У строки с else нет условия — она ловит всё, что не поймал if.
Несколько ветвей через elif
Когда путей больше двух, между if и else ставят elif («else if»):
Python идёт по условиям сверху вниз и выполняет блок первого, которое оказалось истинным. Остальные пропускаются. Этот порядок сверху вниз важен: если поставить score >= 60 перед score >= 90, все получат D — выигрывает первое истинное условие.
Аккуратная структура, которую стоит держать в голове: условия должны быть взаимоисключающими для любого входа, а порядок должен отражать, как ты естественно думаешь о задаче. Самые специфичные случаи — первыми, самые общие — последними.
Truthy-значения в условиях
Выражение в if не обязано вычисляться в буквальные True или False. Python принимает любое значение и сам решает его truthiness:
if items: читается как «если в списке что-то есть». Falsy-значения такие:
False0,0.0None- Пустые контейнеры:
"",[],{},set(),()
Всё остальное — truthy. Truthy-проверка делает код естественнее, с одной оговоркой: если ноль — осмысленное значение (например, счётчик, который легитимно равен нулю), сравнивай явно через is not None или != 0, чтобы не путать «пусто» и «ноль».
Комбинирование условий
and, or и not позволяют собирать составные условия:
Цепочки сравнений аккуратнее явного and, когда границы разделяют общее значение:
Это то же самое, что 18 <= age and age < 65, но читается как математическое неравенство.
Вложенные if
if можно вкладывать в if. Это законно и иногда — самая ясная структура, но это и основной способ, которым условный код становится трудным для чтения. Если ты оказался в трёх уровнях вложенности, подумай о том, чтобы выпрямить код ранними return-ами (когда начнёшь писать функции) или объединить условия:
Оба работают. Выбирай тот вариант, который лучше читается для человека, который видит этот код впервые.
Тернарное выражение
Когда ты просто хочешь, чтобы значение было одним из двух в зависимости от условия, у Python есть компактная форма:
Читается слева направо: «warm, если temp не меньше 70, иначе cool». Отлично для коротких присваиваний либо-либо. Прекращай использовать, как только ветви становятся длинными или содержат несколько операций — тогда полный блок if/else легче глазам.
if — выражение только в одном месте
В отличие от некоторых языков, сам оператор if в Python значение не возвращает. Только тернарная форма. Нельзя написать x = if ...:, как в Rust или Kotlin. Нужно условное значение — тернарник; нужно условное поведение — полный блок if.
Маленький полный пример
Короткая программа, классифицирующая температуру:
Заметь, что логика — почти полностью решение, каким должен быть advice. С одного взгляда видно, какому диапазону температур соответствует какое сообщение. Это та форма, к которой стоит стремиться, когда пишешь условия — каждая ветвь должна быть маленькой, а общее намерение — очевидным.
Что дальше
Условия позволяют коду выбирать путь. Циклы — повторять. Дальше — циклы for, самый частый цикл в Python с большим отрывом и естественный напарник коллекций, с которыми ты встретишься через несколько страниц.
Часто задаваемые вопросы
Как работает оператор if в Python?
if condition: и блок с отступом ниже выполняется только если условие истинно. Необязательные ветви elif (else if) проверяют дополнительные условия, а необязательный else срабатывает, когда ничто другое не подошло.
Есть ли в Python switch-оператор?
В Python 3.10 добавили match/case для структурного паттерн-матчинга, который покрывает большинство сценариев switch и больше. Для простого ветвления цепочка if/elif по-прежнему распространена и вполне нормальна.
Что такое тернарный if в Python?
Однострочное условное выражение: result = a if condition else b. Читается слева направо — «вычисли a, когда condition истинно, иначе вычисли b». Удобно для коротких присваиваний либо-либо; теряет читаемость, как только ветви становятся длинными.