四则运算代码
str_input = input('请输入简单的四则计算式(支持括号):')
class Stack:#建栈
def __init__(self):
self.items = []
def push(self,item):
return self.items.append(item)
def pop(self):
return self.items.pop()
def Inpost(str_input):#遍历传值
pool = ''
stack = ''
for i in str_input:
ret = proc(i,switch(i),stack,pool)
stack = ret['stack']
pool = ret['pool']
if stack != '':
stack = stack[::-1]
return pool + stack
def switch(c):#优先级
operator1 = '+-'
operator2 = '*/'
operator3 = ')'
operator4 = '('
num = '123456789'
if c in num:
return 0
if c in operator1:
return 1
if c in operator2:
return 2
if c in operator3:
return 3
if c in operator4:
return 4
def proc(c,op,stack,pool):#转后缀
top = len(stack)-1
if op == 0:
pool += c
if op == 2 or op==1:
if top == -1:
stack += c
elif switch(stack[top]) < op or stack[top] == '(':
stack += c
else:
while top != -1 and switch(stack[top]) >= op and switch(stack[top])
pool += stack[top]
top -= 1
if top != -1:
stack = stack[0:top+1]
else:
stack = ''
stack += c
if op == 3:
while top!= -1 and stack[top] != '(':
pool += stack[top]
top -= 1
stack = stack[0:top]
if op == 4:
stack += c
ret = {
'stack':stack,
'pool':pool
}
return ret
print(Inpost(str_input)) #打印转换后缀结果
def postfixEval(postfixExpr):#运算符,操作符判断
operandStack = Stack()#建立空栈
tokenList = [x for x in postfixExpr]
for token in tokenList:
if token in"123456789":
operandStack.push(int(token))
else:
operand2 = operandStack.pop()
operand1 = operandStack.pop()
result =doMath(token,operand1,operand2)
operandStack.push(result)
return operandStack.pop()
def doMath(op, op1, op2):#计算
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
result1 = postfixEval(Inpost(str_input))
print('计算式的结果为:%d'%result1)
一键复制
浙公网安备 33010602011771号