Решение типовых задач на условные операторы в Python

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

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

Условные операторы (if, elif, else) являются основой ветвления в Python. С их помощью программа принимает решения на основе логических условий. Рассмотрим несколько типичных задач, их эффективные решения, альтернативные подходы и распространенные ошибки.

Как проверить, является ли число чётным?

Самое прямое решение - использовать оператор взятия остатка %. Если число делится на 2 без остатка, оно чётное.

number = 10
if number % 2 == 0:
    print('Чётное число')
else:
    print('Нечётное число')

условный оператор в python задачи (задачи на условный оператор в python)

Чётное число

Этот способ работает для целых чисел (положительных и отрицательных). Для вещественных чисел остаток от деления определён, но проверка на чётность обычно не применяется.

Как упростить проверку с помощью тернарного оператора?

Для коротких условий можно использовать тернарный оператор (условное выражение). Он возвращает одно из двух значений в зависимости от условия.

number = 7
result = 'Чётное' if number % 2 == 0 else 'Нечётное'
print(result)
Нечётное

Этот вариант компактнее, но уступает в читаемости при сложной логике.

Как использовать битовую операцию для определения чётности?

Младший бит чётного числа равен 0. Операция побитового И (&) с единицей даёт 0 для чётного и 1 для нечётного.

number = 8
if number & 1:
    print('Нечётное')
else:
    print('Чётное')
Чётное

Этот способ быстрее, но менее интуитивен для начинающих. Важно: работает только для целых чисел.

Какие ошибки возникают при проверке чётности?

Частая ошибка - путаница между == и =. Например, if number % 2 = 0 вызовет синтаксическую ошибку. Другая проблема - деление отрицательного числа: -3 % 2 в Python равно 1, а не -1, поэтому условие number % 2 == 0 корректно работает и для отрицательных. Однако если ошибочно использовать abs(number) % 2, результат будет тем же, но код избыточен.

Как определить максимальное из двух чисел?

Классическое решение с if-else.

a, b = 5, 8
if a > b:
    max_num = a
else:
    max_num = b
print(max_num)
8

Можно также использовать встроенную функцию max(), но наша задача - показать работу условного оператора.

Как найти максимум трёх чисел?

Применяем вложенные условия.

a, b, c = 3, 7, 5
if a >= b and a >= c:
    max_num = a
elif b >= a and b >= c:
    max_num = b
else:
    max_num = c
print(max_num)
7

Как использовать тернарный оператор для двух чисел?

max_num = a if a > b else b - краткая запись.

В чём сложность вложенных условий?

Условия становятся громоздкими. Ошибка - неправильная расстановка скобок или логических операторов. Рекомендуется разбивать на отдельные проверки или использовать функцию max() для ясности.

Как определить високосный год?

Год является високосным, если он делится на 4, но не делится на 100, за исключением годов, делящихся на 400.

year = 2024
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print('Високосный')
else:
    print('Не високосный')
Високосный

Можно ли записать условие более читаемо?

Да, разбив на части.

year = 1900
is_leap = False
if year % 400 == 0:
    is_leap = True
elif year % 100 == 0:
    is_leap = False
elif year % 4 == 0:
    is_leap = True
print('Високосный' if is_leap else 'Не високосный')
Не високосный

Как использовать логические операторы в одну строку?

is_leap = year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)

Типичная ошибка при проверке високосности

Игнорирование приоритета операторов: year % 4 == 0 and year % 100 != 0 or year % 400 == 0 - верно благодаря приоритету and выше or. Но если поставить скобки неправильно, например (year % 4 == 0 and year % 100 != 0 or year % 400) == 0, результат исказится.

Как реализовать простой калькулятор с четырьмя операциями?

Используем условный оператор для выбора действия.

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 = a / b
    else:
        result = 'Ошибка: деление на ноль'
else:
    result = 'Неизвестный оператор'

print('Результат:', result)

Как улучшить обработку деления на ноль?

Можно вынести проверку внутрь отдельного условия или использовать try-except, но задача - на условный оператор, поэтому оставляем вложенный if.

Как использовать match-case (Python 3.10+)?

Современная альтернатива длинной цепочке elif.

match op:
    case '+':
        result = a + b
    case '-':
        result = a - b
    case '*':
        result = a * b
    case '/':
        result = a / b if b != 0 else 'Ошибка: деление на ноль'
    case _:
        result = 'Неизвестный оператор'
print('Результат:', result)

Распространённые проблемы в калькуляторе

Забыть преобразовать ввод в число (input возвращает строку). Неверное сравнение строк - нужно учитывать регистр. Также возможна ошибка при использовании elif без else, что может оставить переменную result неопределённой.

Как проверить, можно ли гражданину получить водительские права по возрасту?

Условия: минимальный возраст для обучения - 16 лет, для получения прав - 18 лет.

age = int(input('Ваш возраст: '))
if age >= 18:
    print('Можно получить права')
elif age >= 16:
    print('Можно начать обучение')
else:
    print('Слишком молод')

Как учесть дополнительные условия (например, медицинская справка)?

Добавить вложенный if или дополнительные проверки.

has_certificate = input('Есть справка? (да/нет): ') == 'да'
if age >= 18 and has_certificate:
    print('Права выданы')
else:
    print('Отказ')

Ошибки при проверке возраста

Использование if 18 <= age < 100 - синтаксически верно, но можно забыть о граничных значениях. Другая проблема - ввод некорректных данных (отрицательный возраст, буквы), что требует дополнительной обработки.

Расширенные примеры с условными операторами

Пример 1: Проверка принадлежности точки отрезку

Даны координаты точки и отрезка на числовой прямой. Определить, лежит ли точка внутри отрезка (включая концы).

Пример
x = 5
a, b = 2, 7
if a <= x <= b:
    print('Точка принадлежит отрезку')
else:
    print('Точка вне отрезка')
Точка принадлежит отрезку

Цепное сравнение a <= x <= b эквивалентно a <= x and x <= b. Это упрощает код.

Пример 2: Проверка, является ли треугольник прямоугольным

По трём сторонам (a, b, c) определить, является ли треугольник прямоугольным. Используем теорему Пифагора: квадрат большей стороны равен сумме квадратов двух других.

Пример
a, b, c = 3, 4, 5
# Найдём максимальную сторону
if a > b and a > c:
    hyp = a
    cat1, cat2 = b, c
elif b > a and b > c:
    hyp = b
    cat1, cat2 = a, c
else:
    hyp = c
    cat1, cat2 = a, b

if hyp**2 == cat1**2 + cat2**2:
    print('Прямоугольный треугольник')
else:
    print('Не прямоугольный')
Прямоугольный треугольник

Обратите внимание: если стороны не образуют треугольник (например, 1, 2, 3), то условие не проверяет существование треугольника - это отдельная задача.

Пример 3: Определение времени суток по часу

Классификация часа: 0-5 - ночь, 6-11 - утро, 12-17 - день, 18-23 - вечер.

Пример
hour = 14
if 0 <= hour < 6:
    period = 'ночь'
elif 6 <= hour < 12:
    period = 'утро'
elif 12 <= hour < 18:
    period = 'день'
else:
    period = 'вечер'
print(f'Сейчас {period}')
Сейчас день

Цепные сравнения делают границы наглядными. Можно использовать модуль datetime, но задача на условные операторы.

Пример 4: Проверка, является ли строка палиндромом (с использованием условий)

Сравниваем символы с начала и конца. Условный оператор помогает прервать проверку.

Пример
s = 'radar'
length = len(s)
for i in range(length // 2):
    if s[i] != s[length - 1 - i]:
        print('Не палиндром')
        break
else:
    print('Палиндром')
Палиндром

Использование for...else - не совсем условный оператор, но if внутри цикла - ключевая часть. Можно реализовать и без цикла, срезы: if s == s[::-1].

Пример 5: Вложенные условия для проверки ввода пароля

Пароль должен содержать не менее 8 символов, хотя бы одну цифру и хотя бы одну заглавную букву.

Пример
password = 'Abc12345'
if len(password) >= 8:
    has_digit = any(c.isdigit() for c in password)
    has_upper = any(c.isupper() for c in password)
    if has_digit and has_upper:
        print('Пароль надёжный')
    else:
        print('Пароль должен содержать цифру и заглавную букву')
else:
    print('Пароль слишком короткий')
Пароль надёжный

Использование генераторов и any() сокращает код. Вложенные if реализуют многоуровневую проверку.

Пример 6: Эмуляция switch с помощью словаря и if

Хотя в Python есть match-case, классический способ - словарь с функциями и условный оператор для проверки существования ключа.

Пример
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b): return a / b if b != 0 else 'Error'

operations = {'+': add, '-': sub, '*': mul, '/': div}
op = '*'
a, b = 6, 3
if op in operations:
    result = operations[op](a, b)
    print('Результат:', result)
else:
    print('Неизвестная операция')
Результат: 18

Этот подход отделяет логику от выбора.

Пример 7: Проверка на пустоту коллекции

Условные операторы часто применяются для проверки, содержит ли список элементы.

Пример
items = []
if items:
    print('Список не пуст')
else:
    print('Список пуст')
Список пуст

Python интерпретирует пустые коллекции как False, непустые как True. Это более идиоматично, чем if len(items) > 0.

Пример 8: Выбор между несколькими вариантами с помощью тернарного оператора

Можно вложить тернарные операторы, хотя это ухудшает читаемость.

Пример
a, b, c = 10, 5, 8
max_num = a if a > b else (b if b > c else c)
print(max_num)
10

Лучше избегать таких конструкций.

Пример 9: Использование any() и all() с условиями

Проверить, все ли числа в списке положительные.

Пример
numbers = [3, 7, 0, 2]
if all(x > 0 for x in numbers):
    print('Все положительные')
elif any(x > 0 for x in numbers):
    print('Есть положительные, но не все')
else:
    print('Нет положительных')
Есть положительные, но не все

Здесь условные операторы работают с булевыми значениями, возвращёнными all/any.

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

En
условный оператор в python задачи (python)