Условный оператор
Эта глава — подробное введение в ветвления на Python. Мы разберёмся, зачем они нужны, что такое логические значения, как писать условия, какие бывают варианты if, elif, else, как объединять несколько проверок и не запутаться в отступах. Материал рассчитан на читателя, который ранее не писал код вовсе.
1. Зачем вообще нужны условия?
В обычной жизни мы постоянно выбираем действия в зависимости от обстоятельств:
- Если на улице идёт дождь — берём зонт.
- Если урок начался — садимся за парту, иначе продолжаем отдыхать.
Программа делает то же самое. Она получает входные данные и принимает решения: «Если возраст меньше 7 — дать скидку 50 %, иначе держать полную цену». Такой выбор и называется ветвлением — выполнение может пойти по одной из веток.
2. Логические значения (тип bool)
Условия работают с логическими значениями True (истина) и False (ложь). Их можно получить несколькими способами:
print(5 > 2) # True, потому что пять больше двух
print(10 == 3) # False, числа не равны
print(bool(1)) # True, любое ненулевое число считается истинным
print(bool(0)) # False, ноль — это ложь
print(bool('hi')) # True, непустая строка
print(bool('')) # False, пустая строка
Важно: Python автоматически превращает многие значения в
TrueилиFalse. Это называют «приведением к логическому типу». Полезно помнить, что пустые коллекции ([],{},()), пустые строки и число0— ложь, всё остальное — истина.
3. Общий вид конструкции if
if <условие>:
<действие, если условие истинно>
- Ключевое слово
ifпереводится как «если». - После условия обязательно ставится двоеточие
:. - Следующая строка должна начинаться с отступа — обычно четыре пробела. Отступ показывает, что строка принадлежит блоку
if. - Если условие ложно, блок пропускается.
Минимальный пример:
x = 10
if x > 5:
print('x больше 5')
4. Формы ветвления
4.1. if без альтернативы
Код выполняется только когда условие истинно:
temperature = int(input('Сколько градусов за окном? '))
if temperature < 0:
print('Холодно, надевай шапку')
Если температура ≥ 0, программа молча продолжит работу.
4.2. if + else
else выполняется, когда условие в if оказалось ложным.
n = int(input('Введите число: '))
if n % 2 == 0:
print('чётное')
else:
print('нечётное')
4.3. if + elif + else
elif читается как «иначе если». Python проверяет условия сверху вниз и выполняет только первую подходящую ветку. Когда условие оказалось истинным, остальные elif и else уже не просматриваются.
score = int(input('Введите балл за контрольную: '))
if score >= 90:
print('Отлично')
elif score >= 70:
print('Хорошо')
elif score >= 50:
print('Удовлетворительно')
else:
print('Нужно подтянуться')
5. Отступы и блоки кода
Отступы — ключевая особенность Python. То, что находится под одинаковым отступом, считается единым блоком.
if condition:
do_one()
do_two()
print('Этот текст печатается всегда')
В примере функции do_one() и do_two() вызовутся только если условие истинно. А print выполнится всегда, потому что его отступ вернулся к нулю.
Ошибка новичка — использовать табуляцию и пробелы вперемешку. Выберите один вариант (рекомендуется 4 пробела) и придерживайтесь его.
6. Составные условия и логические операторы
Часто нужно проверять несколько фактов одновременно. Для этого используются операторы:
and— «и». Условие истинно, если истинны обе части.or— «или». Истинно, если хотя бы одна часть — истина.not— «не». МеняетTrueнаFalseи наоборот.
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print('Можно входить на мероприятие')
Также полезны операторы сравнения: ==, !=, >, <, >=, <=. Их можно цепочкой:
if 7 <= age <= 17:
print('школьник')
7. Что происходит, если условие ложно?
Если условие не выполняется и нет else, Python просто перескакивает через блок. Иногда это поведение удобно. Например, можно пропустить сомнительные данные и ничего не делать:
if user_input:
process(user_input)
Здесь пустая строка ('') или 0 приведут к пропуску обработки.
8. Вложенные условия
Условия можно вкладывать друг в друга. Главное — следить за отступами.
age = int(input())
if age >= 18:
if age < 65:
print('Работоспособный возраст')
else:
print('Пенсионер')
else:
print('Несовершеннолетний')
Иногда вложенность можно заменить составным условием: if 18 <= age < 65:. Старайтесь выбирать вариант, который легче прочитать.
9. Типичные ошибки и нюансы
- Пропущенное двоеточие:
if x > 0без:в конце вызывает синтаксическую ошибку. - Неправильные отступы: лишний или недостаточный отступ ломает структуру программы.
- Сравнение с
=: оператор=выполняет присваивание. Для сравнения используется==. - Ввод строк вместо чисел:
input()возвращает строку. Если нужно число — оборачивайте вint()илиfloat(). - Бесконечные цепочки
elif: когда веток становится слишком много, подумайте о другой структуре (словарь, таблица соответствий, функции).
10. Примеры из практических задач
Ниже три подробных сценария, заимствованных из файлов task1.py, task2.py и task3.py. Они показывают, как комбинировать условия в реальных программах.
10.1. Билет в кино — несколько последовательных проверок
Задача: рассчитать цену билета исходя из возраста, дня недели и номера зала.
- Сначала проверяем входные данные. Если возраст ≤ 0, день вне диапазона 1…7 или зал не 1/2 — сразу выводим
0и прекращаем работу. - Если всё корректно, задаём
price = 300. - Применяем одну из возрастных скидок при помощи цепочки
if / elif / elif. - Дополнительный
ifпроверяет воскресную акцию для второго зала.
age, day, hall = map(int, input().split())
if age <= 0 or day <= 0 or day > 7 or hall not in (1, 2):
print(0)
else:
price = 300
if age < 7:
price *= 0.5
elif 7 <= age <= 17:
price *= 0.7
elif age >= 60:
price *= 0.6
if hall == 2 and day == 7:
price *= 0.8
print(int(price))
Используем оператор in, чтобы компактно проверить номер зала, и and, чтобы убедиться в двух условиях одновременно.
10.2. Кредитная заявка — многоступенчатый фильтр
Задача: решить, одобрит ли банк кредит, и на какой срок.
- Отбрасываем некорректные числа
<= 0. - Проверяем возрастной диапазон. Здесь удобно использовать диапазон
18 <= age <= 65и отрицаниеnot (...). - Смотрим на доход и вычисляем максимальную сумму (
salary * 5илиsalary * 10). - Если клиент просит больше этого лимита, пишем «Отказ».
- Иначе выбираем срок кредита с помощью цепочки
elif.
age, salary, credit_sum = map(int, input().split())
if age <= 0 or salary <= 0 or credit_sum <= 0:
print(0)
elif not (18 <= age <= 65):
print("Отказ")
else:
if salary < 20000:
print("Отказ")
else:
if salary <= 50000:
max_credit = salary * 5
else:
max_credit = salary * 10
if credit_sum > max_credit:
print("Отказ")
elif credit_sum <= 100000:
print(1)
elif credit_sum <= 500000:
print(3)
else:
print(5)
Этот пример показывает, что условия можно располагать слоями. Главное — формулировать каждую проверку так, чтобы она отвечала на один конкретный вопрос.
10.3. Проверка даты и квартала — комбинируем несколько веток
Задача: определить, существует ли введённая дата, и вывести квартал (1…4), если дата корректна.
- Проверяем диапазоны дня и месяца.
- Для месяцев с 31 и 30 днями используем кортежи и оператор
in. - Для февраля считаем високосность и выбираем максимально допустимый день.
- Если дата подтверждена, второй блок
if / elif / elseпечатает квартал.
day, month, year = map(int, input().split())
is_correct = False
if 1 <= month <= 12 and 1 <= day <= 31:
if month in (1, 3, 5, 7, 8, 10, 12) and day <= 31:
is_correct = True
elif month in (4, 6, 9, 11) and day <= 30:
is_correct = True
elif month == 2:
leap = (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)
max_day = 29 if leap else 28
if day <= max_day:
is_correct = True
if is_correct:
if month <= 3:
print(1)
elif month <= 6:
print(2)
elif month <= 9:
print(3)
else:
print(4)
else:
print("Дата некорректна")
else:
print("Дата некорректна")
Обратите внимание, что блок с выводом «Дата некорректна» появляется в двух местах. Это нормальная практика: условия могут возвращать пользователя назад, если что-то пошло не так.
11. Дополнительные упражнения
- Пользователь вводит число. Выведите «positive», «negative» или «zero» в зависимости от значения.
- Введите возраст и стаж. Если возраст ≥ 18 и стаж ≥ 1 год — печатайте «допущен к работе», иначе «нужна стажировка».
- Введите три числа, найдите максимум без функции
max(), используя толькоifиelif.
Попробуйте проговаривать свои условия вслух, прежде чем писать код. Это помогает убедиться, что логика понятна.
12. Краткий чек-лист перед запуском программы
- Все
if,elif,elseзаканчиваются двоеточием. - Внутри каждого блока одинаковый отступ (4 пробела).
- Используются логические операторы
and/or, где это облегчает чтение. - Проверены крайние случаи (минимум, максимум, ноль, пустые значения).
- Внятный вывод для пользователя: программа объясняет, что произошло.
Освоив условные операторы, вы сможете создавать программы, которые реагируют на ввод пользователя и меняют своё поведение в зависимости от ситуации. Это фундаментальное умение, без которого не обойтись в любом языке программирования.