使用Python实现逆波兰表达式(ReversePolishNotation)计算器
发布时间:2023-07-06 01:43:02
逆波兰表达式(Reverse Polish Notation)是一种用来表示和计算数学表达式的方法,最早由波兰数学家扬·路卡谢维奇(Jan Lukasiewicz)于1920年提出。在逆波兰表达式中,运算符位于操作数之后。
为了实现逆波兰表达式计算器,我们可以使用栈数据结构来存储操作数和运算符。
下面是一个Python实现逆波兰表达式计算器的示例代码:
def evaluate_rpn(expression):
stack = [] # 用来存储操作数和中间结果的栈
operators = set(['+', '-', '*', '/']) # 支持的运算符集合
for token in expression:
if token not in operators:
stack.append(int(token)) # 如果是操作数,将其转为整数并入栈
else:
b = stack.pop() # 弹出栈顶操作数作为运算符的右操作数
a = stack.pop() # 弹出栈顶操作数作为运算符的左操作数
if token == '+':
stack.append(a + b)
elif token == '-':
stack.append(a - b)
elif token == '*':
stack.append(a * b)
elif token == '/':
stack.append(int(a / b))
return stack.pop() # 返回计算结果
# 测试代码
expression = ['2', '1', '+', '3', '*']
result = evaluate_rpn(expression)
print(result) # 输出 9
expression = ['4', '13', '5', '/', '+']
result = evaluate_rpn(expression)
print(result) # 输出 6
在上面的示例代码中,evaluate_rpn函数接受一个逆波兰表达式作为输入,通过遍历表达式中的每个元素,根据其类型进行相应的操作。当遇到操作数时,将其转为整数并入栈;当遇到运算符时,从栈中弹出两个操作数进行相应的运算,然后将结果入栈。最后,返回栈中 的元素作为计算结果。
通过这种方法,我们可以实现一个简单的逆波兰表达式计算器。这种计算器对于简单的数学表达式既简单又高效,因为逆波兰表达式避免了使用括号和优先级的问题。
