Что такое условие в Python
Условие — это проверка, у которой есть только 2 ответа: True (истина) или False (ложь). Команда if выполняет блок кода под собой, только если ответ — True.
temperatura = 25
if temperatura > 20:
print("Тепло, можно гулять в футболке")
print("Проверка закончена")
Тепло, можно гулять в футболке
Проверка закончена
Строка с if заканчивается двоеточием, а всё, что относится к условию, пишется с отступом в 4 пробела. Последняя строка без отступа выполняется всегда, при любой температуре. Если поменять 25 на 15, программа выведет только «Проверка закончена»: условие ложно, и блок под if пропускается.
В программировании такую конструкцию называют ветвлением: путь выполнения раздваивается, как дорога на развилке. По федеральной образовательной программе ветвления и составные условия изучают на информатике в 8 классе вместе с переменными и циклами[1]. Без условий не обходится ни одна игра: проверка, коснулся ли персонаж стены, набраны ли очки, кончились ли жизни.
Не путать: в Scratch то же самое делают блоки «если … то» и «если … то … иначе». Логика полностью совпадает — сравните с уроком об условиях в Scratch.
Условия в Python и алгоритмы из учебника
Условия в Python — это запись того же ветвления, которое в учебнике информатики рисуют на блок-схеме ромбом с двумя выходами: «да» и «нет». Если вы умеете читать такую схему, перевести её в код — дело одной минуты.
Исследователи вычислительного мышления Brennan и Resnick относят условия к базовым понятиям программирования вместе с последовательностями, циклами, событиями и данными[2]. Поэтому их изучают сразу после переменных и ввода: без проверок программа умеет только выполнять одни и те же шаги, а с ними — реагировать на данные. На ОГЭ, по материалам ФИПИ, задание 16 почти всегда требует проверки: например, посчитать среди введённых чисел те, что делятся на 3, или найти наибольшее. А в заданиях «что выведет программа» нужно мысленно пройти по веткам и понять, какая из них сработает.
Хорошая привычка — перед тем как писать условия в Python, проговорить их словами: «если баллов не меньше 90 — пятёрка, иначе если не меньше 75 — четвёрка». Такая фраза почти дословно превращается в цепочку if, elif и else. Тот же приём работает и в лабиринте с роботом: «если путь впереди свободен — шаг вперёд, иначе — поворот».
Операторы сравнения
Чтобы составить условие, значения сравнивают; в Python для этого есть 6 операторов. Результат любого сравнения — логическое значение True или False.
| Оператор | Значение | Пример | Результат |
== | равно | 5 == 5 | True |
!= | не равно | 5 != 3 | True |
> | больше | 2 > 7 | False |
< | меньше | 2 < 7 | True |
>= | больше или равно | 4 >= 4 | True |
<= | меньше или равно | 9 <= 1 | False |
Главная ловушка — двойное равно. Один знак = записывает значение в переменную, а для сравнения нужны два: ==. Запись if x = 5: вызовет SyntaxError. Сравнивать можно и строки: "кот" == "кот" даст True, а "Кот" == "кот" — False, потому что заглавная и строчная буквы для Python разные.
Удобная особенность: сравнения можно соединять в цепочку, как в математике. Запись 0 < x < 10 проверяет, что x больше нуля и меньше десяти одновременно. Официальная документация Python описывает такие цепочки как обычное выражение[3].
if и else: два пути
Если нужно сделать одно при истинном условии и другое при ложном, к if добавляют else. Блок под else выполняется, только когда условие ложно, поэтому сработает ровно 1 из 2 блоков.
parol = "черепаха"
otvet = "черепаха"
if otvet == parol:
print("Доступ разрешён")
else:
print("Неверный пароль")
У else нет своего условия: это просто «во всех остальных случаях». Слово else пишут на одном уровне с if, а после него обязательно двоеточие. Подставьте в otvet другое слово — и программа выберет вторую ветку. В настоящей программе ответ получают через функцию input, и тогда пользователь сам решает, какая ветка сработает.
elif: несколько вариантов
Когда вариантов больше двух, между if и else вставляют один или несколько elif. Python проверяет условия сверху вниз и выполняет блок первого истинного, а остальные пропускает.
bally = 82
if bally >= 90:
print("Отлично")
elif bally >= 70:
print("Хорошо")
elif bally >= 50:
print("Неплохо")
else:
print("Нужно потренироваться")
Хорошо
82 больше 50, но программа вывела только «Хорошо». Это потому, что условие bally >= 70 сработало первым, и до третьего дело не дошло. Отсюда правило: пороги проверяют по порядку — от большего к меньшему или наоборот, но не вперемешку. Ветка else в конце не обязательна, но полезна: она ловит все случаи, которые вы не предусмотрели.
Логические операции and, or, not
Чтобы объединить несколько проверок в одно составное условие, используют 3 слова: and («и»), or («или») и not («не»).
| Запись | Когда True | Пример |
A and B | Обе проверки истинны | vozrast >= 7 and vozrast <= 17 |
A or B | Хотя бы одна истинна | den == "сб" or den == "вс" |
not A | Проверка ложна | not pobeda |
den = "сб"
dozhd = False
if (den == "сб" or den == "вс") and not dozhd:
print("Идём в парк!")
else:
print("Остаёмся дома")
Скобки здесь важны: and выполняется раньше, чем or, как умножение раньше сложения. Без скобок условие поняли бы как «суббота, или (воскресенье и нет дождя)», и в дождливую субботу программа всё равно позвала бы в парк. Логические операции «и», «или», «не» по ФОП тоже входят в программу 8 класса; подробнее о них — в статье о логических операциях, где есть тренажёр с таблицей истинности.
Вложенные условия
Вложенное условие — это if внутри другого if: внутренняя проверка выполняется, только если сработала внешняя. Каждый уровень вложенности добавляет ещё 4 пробела отступа.
bilet = True
vozrast = 10
if bilet:
if vozrast >= 12:
print("Проходите в зал")
else:
print("Только со взрослым")
else:
print("Сначала купите билет")
Запись if bilet: — сокращение для if bilet == True:. Вложенность удобна, когда вторая проверка имеет смысл только после первой. Но больше 2–3 уровней читать трудно: часто такие конструкции можно «расплющить» с помощью and или elif. Например, if bilet and vozrast >= 12: короче, чем два вложенных if.
Отступы и двоеточие
Python определяет, какие строки относятся к блоку, только по отступам — фигурных скобок, как в C++ или Java, здесь нет. Руководство PEP 8 рекомендует отступ ровно в 4 пробела[4].
if 5 > 3:
print("Да")
Этот код упадёт с ошибкой IndentationError: expected an indented block — Python ждал блок с отступом после двоеточия. Забытое двоеточие даст SyntaxError. В IDLE и в редакторе на этой странице отступ после двоеточия ставится автоматически, но если вы копируете код из чата или документа, пробелы могут сбиться. Разбор этой ошибки — на странице об IndentationError.
Задачи с автопроверкой и граничные тесты
Тренажёр вверху страницы содержит 7 задач: от чётности числа до проверки треугольника. Выберите номер, напишите код и нажмите «✓ Проверить» — решение запустится на нескольких тестах, а справа появятся «Ожидалось» и «Получилось».
Тесты специально проверяют граничные значения: ровно 75 баллов, ноль, 1900 год. Именно на границах чаще всего ошибаются, перепутав > и >=. Если застряли — откройте «Подсказку», а «Показать решение» оставьте напоследок. Ещё больше упражнений в подборке задач на условия; решайте их не за один вечер, а понемногу в разные дни.
Когда if не подходит
Одиночная проверка не подходит, если действие нужно повторять или вариантов слишком много. В этих 4 ситуациях лучше выбрать другой инструмент.
- Повторять проверку, пока пользователь не угадает число. Нужен цикл while; одна проверка сработает только 1 раз.
- Перевести номер месяца от 1 до 12 в название. Двенадцать веток elif громоздки — удобнее список названий и обращение по индексу.
- Проверить каждое из 100 чисел. Условие ставят внутрь цикла for, а не копируют 100 раз.
- Выбрать большее из 2 чисел. Для этого есть готовая функция max(), хотя для тренировки полезно написать и if.
Миф: «После if обязательно должен быть else». Это не подтверждается: else необязателен. Если при ложном условии делать ничего не нужно, достаточно одной проверки.
Миф: «Python проверяет все ветки elif и выполняет все подходящие». Такого поведения не существует: срабатывает только первая ветка с истинным условием, остальные пропускаются, даже если они тоже верны.
Чего делать нельзя
Нельзя писать одно равно вместо двух при сравнении: это самая частая ошибка в проверках. Вот 6 правил, которые помогут писать проверки без багов.
- Нельзя забывать двоеточие в конце заголовка проверки. Без него будет SyntaxError.
- Не следует путать = и ==. Одно записывает, второе сравнивает.
- Не стоит ставить пороги elif вперемешку. Сработает первая истинная ветка, и результат будет неверным.
- Нельзя смешивать пробелы и табуляцию в отступах. Python выдаст TabError или IndentationError.
- Не стоит делать вложенность глубже 3 уровней. Такой код трудно читать — объединяйте проверки через and.
- Не следует сравнивать строку с числом.
"5" == 5всегда ложно; превратите ввод через int().
Источники
[1] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[2] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.
[3] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[4] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
Вопросы и ответы
Сколько elif можно написать?
Сколько угодно. Но если веток больше 5–6, подумайте о списке или словаре: так код станет короче.
Можно ли записать проверку в одну строку?
Да: print("да") if x > 0 else print("нет") или znak = "плюс" if x > 0 else "минус". Новичкам удобнее обычная запись в несколько строк.
Что делать, если в ветке пока нечего писать?
Поставьте слово pass — это команда «ничего не делать». Пустой блок без неё вызовет ошибку отступа.
Чем elif отличается от нескольких if подряд?
Несколько отдельных проверок выполняются все, и могут сработать сразу несколько. В цепочке с elif выполнится только одна ветка.
Как проверить, что число в диапазоне?
Удобнее всего цепочкой: if 1 <= x <= 10:. Это то же самое, что x >= 1 and x <= 10.
Где ещё встречаются условия в Python?
В цикле while: он повторяет блок, пока условие истинно. Об этом — в уроке о цикле while.