Условия

Программа робота редко выполняет одну и ту же команду при любых обстоятельствах. Если путь свободен, робот может продолжить движение. Если датчик обнаружил препятствие, нужно остановиться или повернуть. Такой выбор в Python записывают с помощью if, elif и else.
Условие — это выражение, которое программа считает истинным или ложным. Блок после if выполняется при истинном условии. elif проверяет следующий вариант, а else задаёт действие на случай, когда предыдущие проверки не сработали.
Зачем это нужно
Условия связывают данные с поведением устройства. Они нужны, когда программа должна:
- остановить моторы перед препятствием;
- включить индикатор при низком заряде;
- выбрать направление по двум датчикам линии;
- принять команду только после нажатия кнопки;
- отбросить явно ошибочное измерение.
Условная конструкция не исправляет неточный датчик и не заменяет аппаратную защиту. Она задаёт понятное правило: какие входные значения приводят к какому действию. Такое правило можно проверить на обычном компьютере до подключения моторов.
Главная идея
Python выполняет программу сверху вниз. Встретив if, интерпретатор вычисляет выражение после этого слова. Если результат равен True, выполняется блок с отступом. Если результат равен False, этот блок пропускается.
distance_cm = 18
if distance_cm < 20:
print("Стоп: препятствие близко")
В выражении distance_cm < 20 оператор < сравнивает два числа и возвращает логическое значение. При distance_cm = 18 сравнение истинно, поэтому программа печатает сообщение.
Двоеточие завершает заголовок ветви, а одинаковый отступ объединяет команды в её блок. Обычно используют четыре пробела. Фигурные скобки для блока в Python не нужны.
Команда без нужного отступа уже не принадлежит ветви. Смешивание табуляции и пробелов также может привести к ошибке или запутать структуру кода.
Отступы вместо фигурных скобок
В C++ границы блока показывают фигурные скобки. В Python границы блока показывает одинаковый отступ. Поэтому Python-код выглядит короче, но требует аккуратности с пробелами.
Одинаковый смысл на C++:
if (distance_cm < 20) {
cout << "stop" << endl;
cout << "obstacle" << endl;
}
cout << "check done" << endl;
И на Python:
if distance_cm < 20:
print("stop")
print("obstacle")
print("check done")
Две строки с четырьмя пробелами относятся к условию. Последняя строка начинается без отступа, поэтому выполняется после проверки в любом случае.
Сравнения, из которых строятся условия
Чаще всего условие сравнивает измерение с порогом, режим — с ожидаемым значением, а два сигнала — друг с другом.
| Оператор | Как читать | Пример |
|---|---|---|
== | равно | mode == "auto" |
!= | не равно | sensor_status != "ok" |
< | меньше | distance_cm < 20 |
<= | меньше или равно | battery_percent <= 15 |
> | больше | temperature_c > 60 |
>= | больше или равно | samples_count >= 5 |
Оператор == проверяет равенство, а одиночный = присваивает значение переменной. Поэтому запись mode = "auto" подходит для настройки режима, но не для условия внутри if.
Границу следует формулировать точно. Условия distance_cm < 20 и distance_cm <= 20 по-разному обрабатывают значение 20. Для датчика полезно заранее выписать несколько точек около порога и определить ожидаемую ветвь для каждой.
На этом этапе можно проверить границу тремя отдельными значениями:
stop_distance_cm = 20
distance_cm = 19
print(distance_cm < stop_distance_cm)
distance_cm = 20
print(distance_cm < stop_distance_cm)
distance_cm = 21
print(distance_cm < stop_distance_cm)
Позже мы заменим такие повторяющиеся строки циклом. Пока важно увидеть, как меняется результат сравнения около порога.
Два варианта: if и else
Если нужно выбрать одно из двух действий, к if добавляют else:
distance_cm = 35
if distance_cm < 20:
print("Моторы остановлены")
else:
print("Движение разрешено")
В этой конструкции выполняется ровно одна ветвь. У else нет собственного условия: она используется, только если выражение после if оказалось ложным.
Не всякая задача требует else. Например, индикатор можно включить только при обнаружении ошибки, а затем продолжить выполнение общей части программы:
sensor_ok = False
if not sensor_ok:
print("Нет достоверного измерения")
print("Проверка завершена")
Последняя команда расположена без отступа, поэтому выполняется независимо от результата проверки.
Несколько вариантов: if, elif, else
Для трёх и более взаимоисключающих режимов используют цепочку elif. Python проверяет условия сверху вниз и выполняет блок первой истинной ветви. Остальные условия этой цепочки уже не вычисляются.
distance_cm = 37
if distance_cm < 15:
speed = 0
elif distance_cm < 40:
speed = 30
else:
speed = 70
print("Команда скорости:", speed)
Значение 10 удовлетворяет и условию < 15, и условию < 40, но будет выбрана первая ветвь. Поэтому более узкую и приоритетную проверку ставят раньше.
| Расстояние | Первая истинная проверка | Команда speed |
|---|---|---|
меньше 15 см | distance_cm < 15 | 0 |
от 15 до 39 см | distance_cm < 40 | 30 |
40 см и больше | ни одна | 70 |

Цепочка if–elif–else выбирает один вариант. Несколько отдельных конструкций if работают иначе: истинными могут оказаться сразу несколько проверок, и тогда выполнятся несколько блоков.
distance_cm = 12
battery_percent = 9
if distance_cm < 20:
print("Остановиться перед препятствием")
if battery_percent < 15:
print("Запросить зарядку")
Здесь обе реакции нужны одновременно, поэтому отдельные if подходят лучше одной цепочки.
Логические операции
Одно решение часто зависит от нескольких признаков. Python соединяет их словами and, or и not.
| Операция | Когда результат истинен | Робототехническое правило |
|---|---|---|
a and b | истинны обе части | старт нажат и путь свободен |
a or b | истинна хотя бы одна часть | препятствие слева или справа |
not a | a ложно | ехать, если аварийная остановка не активна |
start_pressed = True
distance_cm = 42
emergency_stop = False
can_move = (
start_pressed
and distance_cm >= 20
and not emergency_stop
)
if can_move:
print("Запуск моторов разрешён")
else:
print("Моторы остаются выключенными")
Круглые скобки позволяют перенести длинное выражение на несколько строк и показывают, какие части образуют одно правило.
У and и or действует сокращённое вычисление. В a and b правая часть не вычисляется, если a уже ложно. В a or b она не вычисляется, если a истинно. Это удобно, когда вторая проверка допустима только после первой:
distance_cm = None
if distance_cm is not None and distance_cm < 20:
print("Близкое препятствие")
else:
print("Нет опасного измерения")
Сначала программа убеждается, что измерение вообще есть. Только затем она сравнивает число с порогом. Переставлять части в таком условии нельзя: None < 20 не является корректным сравнением.
Истинные и ложные значения
В if можно передать не только результат сравнения. Python умеет проверять логическое значение многих объектов. Числовой ноль, пустая строка и пустая коллекция считаются ложными; непустые строки и коллекции обычно считаются истинными.
message = ""
if message:
print("Сообщение есть")
else:
print("Сообщение пустое")
Такую краткую запись удобно читать, когда смысл действительно звучит как «строка не пустая». Для начинающего кода явное сравнение иногда яснее. Например, distance_cm is not None точнее сообщает, что None обозначает отсутствие измерения, а ноль может быть отдельным допустимым или аварийным показанием.
None — не нулевое расстояниеЕсли функция возвращает None при отсутствии данных, сначала проверьте это состояние. Не подменяйте его числом 0, пока не определено, что ноль означает для конкретного датчика.
Робототехнический пример: безопасный выбор скорости
Соберём проверки в порядке приоритета. Сначала учитывается аварийная остановка, затем достоверность измерения, затем расстояние:
emergency_stop = False
distance_cm = 18
if emergency_stop:
command = "stop: emergency"
elif distance_cm is None:
command = "stop: no data"
elif distance_cm < 20:
command = "stop: obstacle"
elif distance_cm < 45:
command = "slow"
else:
command = "forward"
print(command)
Такая программа остаётся учебной моделью: строка с командой не управляет настоящим приводом. Зато таблицу входов можно составить и проверить без оборудования.
emergency_stop | distance_cm | Ожидаемая группа действий |
|---|---|---|
True | любое значение | аварийная остановка |
False | None | остановка из-за отсутствия данных |
False | меньше 20 | остановка перед препятствием |
False | от 20 до 44 | медленное движение |
False | 45 и больше | обычное движение |
Что запомнить про условия
ifпроверяет первый вариант,elif— следующие,else— оставшийся случай.- В одной цепочке выполняется блок первой истинной ветви.
- Отступ определяет, какие команды входят в блок.
==сравнивает, а=присваивает.and,orиnotсоединяют логические признаки.- Граничные значения и приоритет ветвей лучше выписать до запуска робота.
Практика
Задание 1. Порог освещённости
Напишите программу с переменной light_level. Если значение меньше выбранного порога, программа должна вывести команду включения подсветки, иначе — команду выключения. Проверьте число ровно на границе порога.
Задание 2. Три диапазона расстояния
Составьте цепочку if–elif–else для команд «стоп», «медленно» и «вперёд». Самостоятельно выберите два порога и подготовьте не менее пяти тестовых расстояний, включая обе границы.
Задание 3. Разрешение запуска
Создайте логические переменные для кнопки старта, закрытого защитного кожуха и аварийной остановки. Запишите одно выражение can_start, при котором запуск разрешён. Не выводите готовую таблицу ответов — заполните её при запуске своей программы.
Задание 4. Два независимых сообщения
Пусть программа отдельно предупреждает о близком препятствии и о низком заряде. Решите, нужны ли здесь elif или два самостоятельных if, и объясните выбор в комментарии к коду.
Проверьте себя
- Какое значение должно получить условие, чтобы блок после
ifвыполнился? - Чем
elifотличается от отдельного второгоif? - Почему порядок ветвей
< 15и< 40влияет на результат? - Какую роль играют двоеточие и отступ?
- Чем
==отличается от=? - Когда правая часть выражения с
andне вычисляется? - Почему отсутствие измерения полезно хранить как
None, а не всегда как0?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Условие — выражение, которое проверяется как истинное или ложное.
- Ветвь — блок команд, выбранный по результату условия.
if— начало условной конструкции и первая проверка.elif— следующая проверка в той же цепочке.else— ветвь без собственного условия для всех оставшихся случаев.- Логическое значение — одно из двух значений:
TrueилиFalse. - Оператор сравнения — операция вроде
<,>=или==, возвращающая логический результат. - Сокращённое вычисление — пропуск правой части
andилиor, когда результат уже определён. - Порог — граничное значение, по которому программа разделяет режимы.
Связанные темы
- Переменные и типы данных — какие значения участвуют в сравнениях.
- Циклы — как повторять проверку условия и обработку данных.
- Функции — как вынести правило выбора в отдельный блок программы.