Условные операторы: разбор типовых задач и примеров кода
Основные подходы к задачам с условными операторами в Python
Как проверить принадлежность значения диапазону с помощью if?
Классическое решение для задач, где требуется выбрать одну из нескольких веток, - конструкция if-elif-else. Рассмотрим задачу: программа запрашивает возраст пользователя и выдаёт сообщение о доступе к определённому контенту.
age = int(input("Введите ваш возраст: "))
if age < 0:
print("Возраст не может быть отрицательным.")
elif age < 12:
print("Доступ разрешён только с родителями.")
elif age < 18:
print("Доступ ограничен.")
else:
print("Полный доступ.")
Python условия задачи (задачи на условные операторы в python)
Пояснение: после if проверяется первое условие. Если оно ложно, переходим к elif, и так далее. Последний блок else выполняется, если ни одно из предыдущих условий не сработало. Важно соблюдать порядок проверок - от более строгих к менее строгим, иначе логика нарушится.
Как записать простое условие в одну строку?
Тернарный оператор (x if условие else y) подходит для случаев, когда нужно присвоить значение в зависимости от логического выражения без многострочного блока.
number = -5
result = "Положительное" if number > 0 else "Неположительное"
print(result) # Вывод: Неположительное
Цель - сократить код, но злоупотреблять не стоит: сложные вложенные тернарные операторы ухудшают читаемость.
Типичная ошибка:
Путаница оператора присваивания = и сравнения ==. В тернарном операторе условие должно возвращать булево значение, а конструкция x if a = b else y вызовет синтаксическую ошибку.
Как заменить длинную цепочку elif?
Начиная с Python 3.10, доступен оператор match-case. Он удобен, когда проверяется значение одной переменной на соответствие нескольким константам.
command = "exit"
match command:
case "start":
print("Запуск программы")
case "stop":
print("Остановка")
case "exit":
print("Выход")
case _:
print("Неизвестная команда")
Символ подчёркивания _ играет роль шаблона «всё остальное». Такой код легче читать и поддерживать при большом количестве вариантов.
Проблема:
Оператор match-case не поддерживается в старых версиях Python. Если требуется совместимость, остаётся использовать if-elif. Также стоит помнить, что case проверяет только равенство, а не произвольные условия.
Как обрабатывать сложные логические комбинации?
Вложенные условия (if внутри if) применяются, когда решение на верхнем уровне влияет на возможность проверки более детальных условий.
user_input = input("Введите число: ")
if user_input.isdigit():
number = int(user_input)
if number % 2 == 0:
print("Чётное")
else:
print("Нечётное")
else:
print("Введено не число")
Цель - избежать ошибок преобразования типа. Сначала проверяем, является ли строка числом, затем уже работаем с числовым значением. Вложенность более двух уровней часто сигнализирует о необходимости рефакторинга.
Частая ошибка:
Забывают про else для внешнего условия, из-за чего программа может попытаться выполнить int() на нечисловой строке, что приведёт к исключению ValueError.
Расширенные примеры с условными операторами
Пример 1. Определение знака зодиака по дате рождения
day = int(input("День: "))
month = int(input("Месяц (числом): "))
if (month == 3 and day >= 21) or (month == 4 and day <= 19):
sign = "Овен"
elif (month == 4 and day >= 20) or (month == 5 and day <= 20):
sign = "Телец"
elif (month == 5 and day >= 21) or (month == 6 and day <= 20):
sign = "Близнецы"
# ... остальные знаки опущены для краткости
else:
sign = "Неизвестно"
print(f"Ваш знак: {sign}")
Вход: День 15, Месяц 4 -> Ваш знак: Овен
Пример 2. Проверка високосного года
year = int(input("Год: "))
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print("Високосный")
else:
print("Не високосный")
Вход: 2024 -> Високосный Вход: 1900 -> Не високосный
Пример 3. Калькулятор с поддержкой операций
a = float(input("Первое число: "))
b = float(input("Второе число: "))
op = input("Операция (+, -, *, /): ")
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
result = "Ошибка: деление на ноль"
else:
result = a / b
else:
result = "Неизвестная операция"
print(f"Результат: {result}")
Вход: 10, 0, "/" -> Результат: Ошибка: деление на ноль
Пример 4. Игра «Камень-ножницы-бумага» (упрощённая версия)
import random
player = input("Ваш выбор (камень, ножницы, бумага): ").lower()
computer = random.choice(["камень", "ножницы", "бумага"])
if player == computer:
result = "Ничья"
elif (player == "камень" and computer == "ножницы") or \
(player == "ножницы" and computer == "бумага") or \
(player == "бумага" and computer == "камень"):
result = "Вы выиграли"
else:
result = "Компьютер выиграл"
print(f"Компьютер выбрал: {computer}. {result}")
Вход: ножницы -> Компьютер выбрал: камень. Компьютер выиграл
Пример 5. Использование тернарного оператора для списков
numbers = [1, 2, 3, 4, 5]
parity = ["чётное" if x % 2 == 0 else "нечётное" for x in numbers]
print(parity)
['нечётное', 'чётное', 'нечётное', 'чётное', 'нечётное']