Как сделать, чтобы действия в скобках выполнялись первыми?
Делаю калькулятор на питоне. Но не могу понять, как осуществить, чтобы действия в скобках выполнялись первыми? Например: ( 6 + 5 ) * 2
- вывод 22
# Раскладываем выражения на токены
def tokinizer(expression):
tokens = expression.split()
parser(tokens)
# Парсим разделённое выражение
def parser(token):
# / ->
# * ->
# + -> -
# Если длинна токена больше 1, то продолжаем парсить, иначе выводим результат
if len(token) > 1:
if "/" in token:
operator = "/"
#получаем индекс operator в выражении
operIndex = token.index(operator)
# цифра слева от operator
leftNumber = token[operIndex - 1]
# цифра справа от operator
rightNumber = token[operIndex + 1]
# удаляем забранные символы
token.remove(leftNumber)
token.remove(rightNumber)
token.remove(operator)
calculate(operator, leftNumber, rightNumber, token)
elif "*" in token:
operator = "*"
operIndex = token.index(operator)
leftNumber = token[operIndex - 1]
rightNumber = token[operIndex + 1]
token.remove(leftNumber)
token.remove(rightNumber)
token.remove(operator)
calculate(operator, leftNumber, rightNumber, token)
elif "+" in token:
operator = "+"
operIndex = token.index(operator)
leftNumber = token[operIndex - 1]
rightNumber = token[operIndex + 1]
token.remove(leftNumber)
token.remove(rightNumber)
token.remove(operator)
calculate(operator, leftNumber, rightNumber, token)
elif "-" in token:
operator = "-"
operIndex = token.index(operator)
leftNumber = token[operIndex - 1]
rightNumber = token[operIndex + 1]
token.remove(leftNumber)
token.remove(rightNumber)
token.remove(operator)
calculate(operator, leftNumber, rightNumber, token)
else:
print(*token)
def calculate(operator, firstNumber, secondNumber, token):
# логика деления
if operator == "/":
expr = [str(float(firstNumber) / float(secondNumber))]
new_token = expr + token
parser(new_token)
# логика умножения
elif operator == "*":
expr = [str(float(firstNumber) * float(secondNumber))]
new_token = expr + token
parser(new_token)
# логика сложения
elif operator == "+":
expr = [str(float(firstNumber) + float(secondNumber))]
new_token = expr + token
parser(new_token)
# логика вычитания
elif operator == "-":
expr = [str(float(firstNumber) - float(secondNumber))]
new_token = expr + token
parser(new_token)
if __name__ == "__main__":
while True:
expr = input(">> ")
tokinizer(expr)
Источник: Stack Overflow на русском