def calx(op, a, b):
if op == 'mul':
return str(int(a) * int(b))
elif op == 'add':
return str(int(a) + int(b))
elif op == 'div':
if b == '0':
return 'error'
else:
return str(int(a) / int(b))
elif op == 'sub':
return str(int(a) - int(b))
def funx(ss):
ops = []
num = []
for p in ss.split(' '):
if p[0] == '(':
ops += [p.strip('(')]
elif p[-1] == ')':
b = p.strip(')')
a = num.pop()
res = calx(ops.pop(), a, b)
if res == 'error': return res
if ops:
num += [res]
else:
return str(res)
else :
num += [p.strip(')')]
while ops:
b = num.pop()
a = num.pop()
res = calx(ops.pop(), a, b)
if res == 'error': return res
if ops:
num += [res]
else:
return str(res)
ss = '(sub (add 1 4) (div 9 (sub 11 8)))'
#parts = ss.split(' ')
funx(ss)
import re
def func(ss):
patt = re.compile('\(\w+ \d+ \d+\)')
while True:
outs = patt.findall(ss)
if len(outs) == 0:
return ss
for i in outs:
tmp_i = i[1:-1].split(' ')
tmp = calx(tmp_i[0], tmp_i[1], tmp_i[2])
print tmp
if tmp == 'error':
return 'error'
ss = ss.replace(i, tmp)