stack



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)
            


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值