Условные операторы: разбор типовых задач и примеров кода

Раздел: Основы Python -> Условные операторы в Python

Основные подходы к задачам с условными операторами в 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)
['нечётное', 'чётное', 'нечётное', 'чётное', 'нечётное']

Задачи на условные операторы в Python - comments

En
Python условия задачи (python)