import string
def convert(unfixstr):
opstack = []
postfixlist = []
prec = {}
prec['('] = 0
prec['*'] = 2
prec['/'] = 2
prec['+'] = 1
prec['-'] = 1
tokenlist = unfixstr.split(' ')
for token in tokenlist:
if token in string.ascii_uppercase:
postfixlist.append(token)
elif token == '(':
opstack.append(token)
elif token == ')':
toptoken = opstack.pop()
while toptoken != '(':
postfixlist.append(toptoken)
toptoken = opstack.pop()
else:
while opstack != [] and (prec[opstack[-1]] >= prec[token]):
postfixlist.append(opstack.pop())
opstack.append(token)
while opstack:
postfixlist.append(opstack.pop())
return ''.join(postfixlist)
print(convert('( A * B ) + ( C * D )'))
def output(postfixstr):
outputstack = []
def calculate(input1,input2,op):
if op == '+':
return input1 + input2
if op == '-':
return input1 - input2
if op == '*':
return input1 * input2
if op == '/':
return input1 / input2
postfixlist = postfixstr.split(' ')
for token in postfixlist:
if token in '1234567890':
outputstack.append(token)
elif token in '+-*/':
input1 = outputstack.pop()
input2 = outputstack.pop()
temp = calculate(int(input2), int(input1), token)
outputstack.insert(0, temp)
return outputstack[0]
print(output('1 2 * 3 4 * +'))