stack

来源:互联网 发布:服装搭配软件 编辑:程序博客网 时间:2024/06/04 19:00



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 redef 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)