F. Арифметический помощник

Разработайте функцию get_operator, которая принимает строковое обозначение одной из целочисленных математических операций Python (+-*//**) и возвращает соответствующую функцию двух переменных.

Примечание

В решении не должно быть вызовов требуемых функций.

Пример

Ввод

operator_plus = get_operator("+")
print(operator_plus(3, 5))

Вывод

8

Ввод

operator_power = get_operator("**")
print(operator_power(2, 10))

Вывод

1024

Решение

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

Как мы знаем функция в python такой же объект, как и переменная, а значит, если написать

Python
def sum(a, b)
  return a + b
  
  
def func()
  return sum

то func(a, b) будет эквивалентно вызову sum(a, b)

Обладая этим знанием, решить задачу не составляет труда.

Основой любого решения будет набор условий, которые возвращают ту или иную заранее описанную функцию.

Посмотреть код

Решение

Python
def get_operator(operator: str):
    def operator_add(a, b):
        return a + b

    def operator_sub(a, b):
        return a - b

    def operator_mul(a, b):
        return a * b

    def operator_floordiv(a, b):
        return a // b

    def operator_pow(a, b):
        return a ** b

    if operator == '+':
        return operator_add
    if operator == '-':
        return operator_sub
    if operator == '*':
        return operator_mul
    if operator == '//':
        return operator_floordiv
    if operator == '**':
        return operator_pow

    raise ValueError(f"Unsupported operator: {operator}")

Решение

Python
def get_operator(operator: str):
    if operator == '+':
        return lambda a, b: a + b
    if operator == '-':
        return lambda a, b: a - b
    if operator == '*':
        return lambda a, b: a * b
    if operator == '//':
        return lambda a, b: a // b
    if operator == '**':
        return lambda a, b: a ** b

    raise ValueError(f"Unsupported operator: {operator}")

Решение

Python
import operator as op

def get_operator(operator: str):
    mapping = {
        '+': op.add,
        '-': op.sub,
        '*': op.mul,
        '//': op.floordiv,
        '**': op.pow,
    }
    try:
        return mapping[operator]
    except KeyError:
        raise ValueError(f"Unsupported operator: {operator}")
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии