后缀表达式
在 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
最近表达式玩的很多呀,又是一个集合 😆 👍