Практика использования if-else в Python: задачи и ответы

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

Задания на условный оператор if-else

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

Основной способ: использование оператора остатка от деления %. Если число делится на 2 без остатка, оно чётное.

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

задания на if else python (задания на условный оператор if-else в python)

Результат: Число нечётное. Обратите внимание на отступы: блоки if и else должны находиться на одном уровне.

Как записать ту же проверку в одну строку?

Тернарный (условный) оператор позволяет сократить код:

number = 10
result = "чётное" if number % 2 == 0 else "нечётное"
print(result)

условные операторы python примеры (условные операторы в python с примерами)

Результат: чётное. Подходит для простых условий, но при сложной логике читаемость страдает.

Типичная ошибка: использование одного знака равенства = вместо == для сравнения. Например, if number % 2 = 0 вызовет синтаксическую ошибку. Также путают оператор присваивания и сравнения.

Проблема: при отрицательных числах остаток от деления может быть отрицательным в некоторых языках, но в Python % возвращает неотрицательный остаток (0 или 1 для чётности). Ошибки не возникает.

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

Используем вложенные условия или просто if-else с логическим выражением:

a, b = 15, 9
if a > b:
    max_num = a
else:
    max_num = b
print("Максимум:", max_num)

условия на языке python (условные конструкции на языке python)

Результат: Максимум: 15. Переменная max_num сохраняет большее значение.

Как найти максимум без использования if?

Функция max() делает то же самое в одну строку:

max_num = max(a, b)

Python команда else (конструкция if-else в python)

Но часто учебные задания требуют написать логику вручную, чтобы понять работу условных конструкций.

Типичная ошибка: забыть обработать случай равенства чисел. Приведённый код корректно присвоит любое из равных чисел, так как условие a > b ложно при равенстве, и выполняется else. Если требуется особое поведение при равенстве, нужно добавить elif.

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

Правило: год високосный, если делится на 4, но не делится на 100, за исключением годов, кратных 400. Реализуем через цепочку if-elif-else:

year = 2024
if year % 400 == 0:
    is_leap = True
elif year % 100 == 0:
    is_leap = False
elif year % 4 == 0:
    is_leap = True
else:
    is_leap = False
print("Високосный?", is_leap)

Print if else python (условный оператор в print)

Результат: Високосный? True. Проверка 400 делается первой, чтобы исключить столетия, кратные 400.

Как упростить проверку с помощью одного логического выражения?

Объединяем условия операторами and и or:

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

Это более компактная запись, но требует понимания приоритета операторов.

Типичная ошибка: неправильный порядок условий. Например, проверка деления на 4 раньше деления на 100 может дать True для года 1900, который не является високосным. Важно сначала обработать исключение (400) или использовать правильное логическое выражение.

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

Используем if-elif-else для обработки разных арифметических действий:

a = 10
b = 3
op = '+'
if op == '+':
    res = a + b
elif op == '-':
    res = a - b
elif op == '*':
    res = a * b
elif op == '/':
    if b != 0:
        res = a / b
    else:
        res = "ошибка: деление на ноль"
else:
    res = "неизвестная операция"
print(res)

Результат: 13. Внутри обработки деления дополнительная проверка на ноль.

Как организовать калькулятор с помощью словаря функций?

Можно избежать длинной цепочки if с помощью словаря, где ключи - символы операций, а значения - лямбда-функции:

operations = {
    '+': lambda x, y: x + y,
    '-': lambda x, y: x - y,
    '*': lambda x, y: x * y,
    '/': lambda x, y: x / y if y != 0 else "деление на ноль"
}
res = operations.get(op, lambda x, y: "неизвестная операция")(a, b)
print(res)

Такой подход легко расширяется добавлением новых операций без изменения логики проверок.

Типичная ошибка: забыть обработать случай деления на ноль или некорректную операцию. В базовом варианте без дополнительной проверки возникнет исключение ZeroDivisionError. В варианте со словарём лямбда-функция может вернуть строку, что нарушает тип результата. Нужно продумать единообразную обработку ошибок.

Как категоризировать возраст (ребёнок, подросток, взрослый, пожилой)?

Используем последовательную проверку с помощью if-elif-else:

age = 17
if age < 13:
    category = "ребёнок"
elif age < 18:
    category = "подросток"
elif age < 65:
    category = "взрослый"
else:
    category = "пожилой"
print(category)

Результат: подросток. Важен порядок: сначала проверяются младшие возрасты, чтобы не перекрыть границы.

Как использовать оператор in для категоризации по диапазонам?

Можно разбить возраст на диапазоны с помощью кортежей и проверить принадлежность оператором in:

ranges = {
    (0, 12): "ребёнок",
    (13, 17): "подросток",
    (18, 64): "взрослый",
    (65, 120): "пожилой"
}
for (low, high), cat in ranges.items():
    if low <= age <= high:
        category = cat
        break
print(category)

Этот вариант гибче при изменении границ, но длиннее.

Типичная ошибка: не учтено, что возраст может быть отрицательным или слишком большим. В примере выше границы заданы от 0 до 120, но лучше добавить проверку корректности входных данных. Также при использовании диапазонов легко пропустить какое-то значение (например, если возраст 13 не попал в диапазон из-за ошибки в границах).

Расширенные примеры работы с if-else

Как проверить, находится ли точка внутри заданной области (например, прямоугольника)?

Используем вложенные условия и логические операторы. Допустим, прямоугольник задан левым нижним углом (0,0) и правым верхним (10,10). Точка (x,y) находится внутри, если x от 0 до 10 и y от 0 до 10.

Пример
x, y = 5, -1
if 0 <= x <= 10 and 0 <= y <= 10:
    print("Точка внутри прямоугольника")
else:
    print("Точка вне прямоугольника")
Точка вне прямоугольника

Усложнение: добавить проверку на принадлежность границе (если x==0 или x==10 или y==0 или y==10 - точка на границе). Можно использовать цепочку if-elif:

Пример
if x < 0 or x > 10 or y < 0 or y > 10:
    status = "вне прямоугольника"
elif x == 0 or x == 10 or y == 0 or y == 10:
    status = "на границе"
else:
    status = "внутри"
print(status)
вне прямоугольника

Как реализовать логику switch-case в Python (до версии 3.10)?

До появления match-case (Python 3.10+) конструкцию switch имитировали с помощью словаря и if-elif. Пример: определить день недели по номеру.

Пример
day_num = 3
if day_num == 1:
    day_name = "Понедельник"
elif day_num == 2:
    day_name = "Вторник"
elif day_num == 3:
    day_name = "Среда"
elif day_num == 4:
    day_name = "Четверг"
elif day_num == 5:
    day_name = "Пятница"
elif day_num == 6:
    day_name = "Суббота"
elif day_num == 7:
    day_name = "Воскресенье"
else:
    day_name = "Неверный номер"
print(day_name)
Среда

Альтернатива с использованием словаря:

Пример
weekdays = {1: "Понедельник", 2: "Вторник", 3: "Среда", 4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"}
day_name = weekdays.get(day_num, "Неверный номер")
print(day_name)
Среда

Словарь работает быстрее при большом количестве вариантов и улучшает читаемость.

Как обработать несколько условий с помощью all() и any()?

Иногда нужно проверить, что все (или хотя бы одно) из нескольких условий истинны. Вместо длинных цепочек and/or можно использовать встроенные функции.

Пример
a, b, c = 10, -5, 0
# Проверить, что все числа положительные
if all(x > 0 for x in (a, b, c)):
    print("Все числа положительные")
else:
    print("Не все числа положительные")

# Проверить, что хотя бы одно число равно нулю
if any(x == 0 for x in (a, b, c)):
    print("Есть хотя бы один ноль")
else:
    print("Нулей нет")
Не все числа положительные
Есть хотя бы один ноль

Такой подход упрощает код при проверке большого числа переменных или элементов списка.

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

Хотя лучше избегать проверок типов, иногда это необходимо, например, при обработке ввода пользователя.

Пример
value = input("Введите число или строку: ")
if value.isdigit():
    number = int(value)
    if number % 2 == 0:
        print("Вы ввели чётное число")
    else:
        print("Вы ввели нечётное число")
else:
    if value.isalpha():
        print("Вы ввели слово без цифр")
    else:
        print("Вы ввели смешанные данные")

В этом примере сначала проверяется, состоит ли строка из цифр (число), затем - из букв, иначе - смешанный ввод. Это демонстрирует вложенные условия и работу с методами строк.

Как реализовать обработку ошибок с помощью if вместо try-except?

Иногда можно избежать исключений, предварительно проверив условия. Например, деление на ноль или доступ к индексу списка.

Пример
numbers = [10, 20, 30]
index = 5
if 0 <= index < len(numbers):
    print("Элемент:", numbers[index])
else:
    print("Индекс за пределами списка")

x, y = 10, 0
if y != 0:
    print("Результат деления:", x / y)
else:
    print("Деление на ноль не допускается")
Индекс за пределами списка
Деление на ноль не допускается

Такой стиль называется LBYL (Look Before You Leap). В некоторых случаях он предпочтительнее, чем EAFP (Easier to Ask for Forgiveness than Permission) с try-except, особенно когда ожидается, что ошибка случается редко.

Как использовать if-else для применения разных формул в зависимости от условия?

Например, расчёт стоимости доставки: если вес меньше 10 кг - тариф 5 руб./кг, иначе - 3 руб./кг, но с фиксированной надбавкой 20 руб.

Пример
weight = 15
if weight < 10:
    cost = weight * 5
else:
    cost = weight * 3 + 20
print("Стоимость доставки:", cost, "руб.")
Стоимость доставки: 65 руб.

Можно также использовать тернарный оператор:

Пример
cost = weight * 5 if weight < 10 else weight * 3 + 20

Но для сложных формул лучше сохранять читаемость через полноценные блоки if-else.

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

En
задания на if else python (python)