class Stack(object):#用列表实现栈
def __init__(self): #实例化栈
self.list = []
def isEmpty(self):#判断栈空
return self.list == []
def push(self, item):#入栈
self.list.append(item)
def pop(self):#出栈
return self.list.pop()
def top(self):#返回顶部元素
return self.list[len(self.list)-1]
def size(self):#返回栈大小
return len(self.list)
# 前缀表达式求值
def pretomid(x):
s = Stack()
list = x.split()#空格分割待字符串
for par in list:
if par in "+-*/":#遇到运算符则入栈
s.push(par)
else: #为数字时分两种情况:
if s.top() in '+-*/':#栈顶为运算符
s.push(par)#数字入栈
else:#当前栈顶为数字
while (not s.isEmpty()) and (not s.top() in '+-*/'):#若栈不空,且当前栈顶为数字,则循环计算
shu = s.pop()#运算符前的数字出栈
fu = s.pop()#运算符出栈
par = '('+shu+fu+par+')'#计算
s.push(str(par))#算式入栈
return s.pop()#返回最终算式
n = input("请输入前缀表达式:")
print(pretomid(n))
Python 前缀表达式变中缀表达式
最新推荐文章于 2023-11-07 09:01:44 发布