后缀表达式

在 evaluate_postfix_expr(expr) 函数中创建一个简单的后缀计算器。
后缀计算器将读取表达式中的后缀符号 (也可作为反向波兰符号)
操作符位于操作数内部 (例如 (1+2)*3)
操作符放在操作数之后(例如 1 2 + 3 )。
使用后缀表示法,不需要处理优先级和括号,您可能会发现简单的数据结构堆栈对您的实现很有帮助。 您的计算器应支持运算符 +(加), - (减),
(乘)和 /(除)。

函数接受一个字符串 expr 作为输入。输入字符串包含一系列由空格分隔的运算符和操作数。我们不会测试由下面提到的字符组成的表达式。
运算符包括 +, - ,*,/
运算符是以字符串形式表示的整数
空格定义为以下字符:“”(空格),“\ t”(制表符),“\ n”(换行符)和“\ r”(回车)
函数应该返回一个有效的 int 实例作为输出。如果出现错误,返回 None 表示表达式无效而不是崩溃。

参考资料:https://www.cnblogs.com/jiu0821/p/6692878.html

我的代码:

import from_string

def evaluate_postfix_expr(expr):
    orig_stack = []
    nums = expr.split()

    for num in nums:
        pattern = from_string.compile('[0-9]+')
        match = pattern.findall(num)
        if match:
            orig_stack.append(int(num))
        elif num in "+_*/":
            operand2 = orig_stack.pop()
            operand1 = orig_stack.pop()
            result = ys(num, operand1, operand2)
            orig_stack.append(int(result))
            print(result)
        else:
            return None
    return orig_stack.pop()


def ys(ysf, s1, s2):
    if ysf == "+":
        return s1 + s2
    elif ysf == "-":
        return s1 - s2
    elif ysf == "*":
        return s1 * s2
    else:
        return s1 / s2