四则运算代码

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)

一键复制