import operator
operators = {
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv,
}
def calculate(expression: str) -> float:
# разбиваем выражение на список из чисел и операторов
tokens = re.findall(r"\d+|\+|-|\*|/", expression)
# выполняем вычисления в цикле, пока в списке остается больше одного элемента
while len(tokens) > 1:
# находим индекс первого оператора в списке
operator_index = next(i for i, token in enumerate(tokens) if token in operators)
# вычисляем результат операции и заменяем оператор и операнды в списке на результат
result = operators[tokens[operator_index]](
float(tokens[operator_index-1]),
float(tokens[operator_index+1]),
)
tokens = tokens[:operator_index-1] + [result] + tokens[operator_index+2:]
# возвращаем оставшийся элемент списка (результат вычислений)
return tokens[0]
# проверяем работу калькулятора
print(calculate("2 + 3 * 4")) # должно вывести 14
print(calculate("2 + 7 / 2"))
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
import operator
operators = {
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv,
}
def calculate(expression: str) -> float:
# разбиваем выражение на список из чисел и операторов
tokens = re.findall(r"\d+|\+|-|\*|/", expression)
# выполняем вычисления в цикле, пока в списке остается больше одного элемента
while len(tokens) > 1:
# находим индекс первого оператора в списке
operator_index = next(i for i, token in enumerate(tokens) if token in operators)
# вычисляем результат операции и заменяем оператор и операнды в списке на результат
result = operators[tokens[operator_index]](
float(tokens[operator_index-1]),
float(tokens[operator_index+1]),
)
tokens = tokens[:operator_index-1] + [result] + tokens[operator_index+2:]
# возвращаем оставшийся элемент списка (результат вычислений)
return tokens[0]
# проверяем работу калькулятора
print(calculate("2 + 3 * 4")) # должно вывести 14
print(calculate("2 + 7 / 2"))