Программа print("Привет!") всегда делает одно и то же. Настоящие программы ведут себя по-разному в зависимости от данных: пропускают пользователя или отказывают, показывают скидку или полную цену. Чтобы это стало возможным, у языка должен быть способ проверить условие и выбрать, какой код выполнять.
Разминка. Опишите словами (не кодом), как вы решаете, что надеть, выходя из дома: «если идёт дождь – беру куртку с капюшоном, если просто прохладно – свитер, если тепло – футболку». Такую цепочку решений вы проговариваете буквально каждый день.
В этом уроке: шесть операторов сравнения, тип данных bool с его двумя значениями, синтаксис if, роль отступов, ветка else и цепочка elif для нескольких исходов.
Что такое ветвление
Ветвление – конструкция языка программирования, которая выполняет один из нескольких участков кода в зависимости от истинности условия.
Истина и ложь здесь – те же самые, что и в формулах алгебры логики: 1 и 0, только теперь они не значки на бумаге, а значения, которые программа вычисляет на ходу и по которым выбирает путь. В Python за ветвление отвечают ключевые слова if, elif и else.
Операторы сравнения
Чтобы получить условие, обычно сравнивают значения. В Python шесть операторов сравнения:
Оператор
Смысл
==
равно
!=
не равно
<
меньше
>
больше
<=
меньше или равно
>=
больше или равно
Частая ошибка новичков – перепутать = и ==. = – это присваивание («положить значение в переменную»). == – это вопрос («равны ли значения?»), и ответ на этот вопрос – не число и не строка, а логическое значение.
Тип данных bool: True и False
bool – тип данных из ровно двух значений: True (истина) и False (ложь).
Важная деталь синтаксиса: они пишутся с заглавной буквы – True/False, а не true/false, как в некоторых других языках. Результат любого сравнения – всегда значение именно этого типа, в чём легко убедиться в интерактивном режиме:
Вторая строка стоит отдельного внимания: 5 == 5.0 истинно, хотя слева целое число, а справа вещественное – сравниваются значения, а не типы.
Оператор if: синтаксис
Базовая конструкция:
if условие:
инструкция
Если условие истинно (True) – выполняется тело внутри if. Если ложно (False) – тело целиком пропускается, и программа идёт дальше. Простейший пример:
number = -5
if number > 0:
print("Число положительное")
Здесь number > 0 даёт False, поэтому print() не выполнится вовсе, и программа ничего не выведет.
Отступы – не украшение, а синтаксис
В некоторых языках (например, C++ или Java) границы блока кода задаются фигурными скобками { }. В Python вместо этого – отступ: все строки тела if, сдвинутые на одинаковое количество пробелов вправо, и есть то, что выполняется внутри условия. Стандарт (PEP 8) – 4 пробела на уровень вложенности.
Два типичных источника ошибок у новичков:
Забытое двоеточие : в конце строки с if – Python выдаст SyntaxError и не запустит программу вообще: без двоеточия он не понимает, что дальше начинается блок.
Несовпадающий отступ (например, смешаны пробелы и табуляция) – в этом случае будет IndentationError. Python не «угадает» намерение, как мог бы сделать человек.
Ветка else
else добавляет альтернативу – то, что выполняется, когда условие if оказалось ложным. Собственного условия у else нет: это буквально «во всех остальных случаях». Ветка необязательна – if прекрасно работает и сам по себе.
number = 7
if number % 2 == 0:
print("Чётное")
else:
print("Нечётное")
Обратите внимание на условие: остаток от деления на 2 сравнивается с нулём. Записывать if number % 2: тоже можно, но явное сравнение читается однозначнее.
Цепочка elif – несколько альтернатив
Когда исходов больше двух, ветку else можно раскрыть через elif (сокращение от «else if») – сколько угодно раз подряд, между if и финальным else.
Важное свойство работы цепочки: Python проверяет условия строго по порядку сверху вниз и останавливается на первом же истинном – выполнится ровно одна ветка, даже если истинны сразу несколько условий подряд. В примере выше 82 удовлетворяет и >= 70, и >= 50, но до третьей проверки очередь не дойдёт.
Отсюда следует, что порядок условий важен: если условия пересекаются, более узкое (частный случай) нужно проверять раньше более широкого. Поменяйте в примере строки местами, поставив score >= 50 первой, – и любой балл выше 50 получит тройку.
Блок-схема лесенки if/elif/else: каждый ромб – проверка условия, стрелка «нет» ведёт к следующей проверке, стрелка «да» – к результату.
Коротко
Ветвление выполняет один из нескольких участков кода в зависимости от истинности условия.
Шесть операторов сравнения: ==, !=, <, >, <=, >=. Не путать = (присваивание) и == (сравнение).
Результат сравнения – значение типа bool: True или False, обязательно с заглавной буквы.
Тело блока в Python задаётся отступом (4 пробела), а не скобками; забытое двоеточие даёт SyntaxError, кривой отступ – IndentationError.
else – «во всех остальных случаях», собственного условия у него нет и он необязателен.
В цепочке elif выполняется ровно одна ветка – первая, чьё условие истинно. Поэтому порядок условий важен: частный случай проверяют раньше общего.
Проверь себя
Короткие вопросы по теме урока. Попыток сколько угодно, на прохождение блока они не влияют – это проверка для себя.