Способы оценки математических выражений - PullRequest
0 голосов
/ 19 июня 2020

Какие есть подходы к вычислению такого выражения, как ((1 + 1) * 2) - 3? Прямо сейчас я конвертирую его в постфиксную форму 1 1 + 2 * 3 -, а затем оцениваю это. Я хотел бы знать, есть ли подходы получше, чем этот.

1 Ответ

0 голосов
/ 20 июня 2020

Это должно работать, но выражение должно быть заключено в круглые скобки, например: ((4-6) + (7/9) +3) должно быть (((4-6) + (7/9)) + 3 )

def evalu(express):
    operat,numbers=[],[]
    for i in express:
        if i =='(':
            pass
        elif i in '0123456789':
            numbers.append(int(i))
        elif i in "+*-/":
            operat.append(i)
        elif i==")" :
            oper=operat.pop()
            if oper =='+':numbers.append(numbers.pop()+numbers.pop())
            elif oper =='*':numbers.append(numbers.pop()*numbers.pop())
            elif oper =='/':numbers.append(numbers.pop(-2)/numbers.pop())
            elif oper =='-':numbers.append(numbers.pop(-2)-numbers.pop())
    return numbers.pop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...