Решение, по форме похожее на английскую фразу
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». Удобно для коротких присваиваний либо-либо; теряет читаемость, как только ветви становятся длинными.