后缀表达式计算器

后缀表达式计算器,也称为计算器,是一种特殊的计算器,它要求在表达式中,操作符必须出现在其操作数之后。例如,一个普通的前缀表达式25 + 12,在后缀表达式中会写成25 12 +。后缀表达式的计算顺序是按照操作符出现的顺序,从左到右进行的。为了实现这个计算器,需要定义一个栈类,这个栈类将作为操作数和中间结果的容器。最终结果也会存储在栈中,并在过程结束时被提取出来显示。

后缀表达式计算器的工作原理是将操作数推入中,直到遇到一个操作符。当遇到操作符时,将最后两个推入栈的操作数弹出,执行所需的操作,并将操作的结果再次推入栈中。在表达式的末尾,从栈中弹出最后一个值,并将其显示为最终结果。

代码实现

以下是栈的节点类代码,它是栈类的基础。它定义了一个构造函数以及所需的获取器和设置器方法。

class Node: def __init__(self, d): self.data = d def setnext(self, n): self.next = n def getdata(self): return self.data def getnext(self): return self.next

以下是类代码。它定义了一个构造函数以及push和pop操作,此外还有一个方法来检查栈是否为空。

class Stack: def __init__(self): self.top = None def push(self, d): self.newnode = Node(d) self.newnode.setnext(self.top) self.top = self.newnode def pop(self): temp = self.top self.top = self.top.getnext() n = temp.getdata() del temp return n def isempty(self): return self.top == None import re if __name__ == "__main__": try: mystack = Stack() expr = input("Enter expression with space between numbers and operators: ") expr = re.sub("\s+", " ", expr) expr = expr.strip() elements = re.split(r"\s+", expr) for x in elements: if x == "+": n1 = int(mystack.pop()) n2 = int(mystack.pop()) n3 = n2 + n1 mystack.push(n3) elif x == "-": n1 = int(mystack.pop()) n2 = int(mystack.pop()) n3 = n2 - n1 mystack.push(n3) elif x == "*": n1 = int(mystack.pop()) n2 = int(mystack.pop()) n3 = n2 * n1 mystack.push(n3) elif x == "//": n1 = int(mystack.pop()) n2 = int(mystack.pop()) n3 = n2 // n1 mystack.push(n3) elif x == "/": n1 = int(mystack.pop()) n2 = int(mystack.pop()) n3 = n2 / n1 mystack.push(n3) else: mystack.push(x) print("Result: " + str(mystack.pop())) except AttributeError as e: print("Invalid Expression: " + str(e))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485