题解 | #四则运算#

四则运算

http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

Python3 逆波兰方法求解四则运算

a = input()
for ch in a:
    if ch in '[{':
        a = a.replace(ch,'(')
    elif ch in '}]':
        a = a.replace(ch,')')

b = [' ']  # 存储四则运算符号(栈)
c = []  # 存储输出的后缀表达式
d = {'*': 3, '/': 3, '+': 2, '-': 2, ' ': 1}  # 字典存储优先级
flag = 0
for i in range(len(a)):
    if a[i] == '-':
        if i == 0: # 如果'-'为负号,跳出该次循环,flag = 1
            flag = 1
            continue
        elif a[i-1] in '(':
            flag = 1
            continue
    elif 48 <= ord(a[i]) <= 57:   #如果上一个字符也是数字,直接跳出此次循环
        if i == 0:
            pass
        elif 48 <= ord(a[i-1]) <= 57:
            continue
    if 48 <= ord(a[i]) <= 57:  # 数字直接输出
        num = a[i]
        if i != len(a)-1:
            j = 1
            while i+j < len(a):
                if 48 <= ord(a[i + j]) <= 57:
                    num += a[i+j]
                    j = j+1
                break
        if flag == 1:
            c.append('-' + num)
            flag = 0
        else:
            c.append(num)
    elif a[i] == ')':  # 右括号,栈顶元素出栈输出,直到遇到左括号或栈空为止
        while b[-1] != ' ' and b[-1] != '(':
            c.append(b.pop())
        if b[-1] == '(':
            b.pop()
    elif a[i] == '(' or b[-1] == '(':  # 符号为'('或栈顶为'(',则直接入栈
        b.append(a[i])
    elif d[a[i]] > d[b[-1]]:   # 优先级高,直接入栈
        b.append(a[i])
    else:  # 优先级比栈顶元素低,则出栈,直到比栈顶元素优先级高或栈空
        while d[a[i]] <= d[b[-1]] and b[-1] != ' ':
            c.append(b.pop())
            if b[-1] == '(':
                break
        b.append(a[i])
if len(b) > 1:
    for i in range(1,len(b)):
        c.append(b.pop())

b = []     # 存放数字
for ch in c:
    if len(ch) > 1:
        b.append(eval(ch))
    elif 48 <= ord(ch) <= 57:     #如果是数字,进栈
        b.append(eval(ch))
    else:
        x1 = b.pop()
        x2 = b.pop()
        if ch == '+':
            m = x2 + x1
        elif ch == '-':
            m = x2 - x1
        elif ch == '*':
            m = x2 * x1
        else:
            m = x2 /x1
        b.append(m)
print(b[0])
全部评论

相关推荐

2025-12-02 02:15
门头沟学院
最近菊厂陆续开了,极力劝退那些拿13级的985硕士,就13级那么点儿薪资,一线城市每个月到手1.8/7/6w,租房2k还是破烂,吃饭2k还是预制菜,买个1k衣服都是聚酯纤维破塑料,稍微出去浪一浪,能留1w就是万岁,要是再有个啥都想买的对象,一线工作一年难存10w。隔壁工地混泥土,钳工,焊工一天800+,还包吃包住。读书18年到985硕士出来就为了进厂螺丝工?还不如从8岁童工开始干活,别人读书完了你工龄18+,混不上领导也是个小头头了。当然专科进来正式工,od都行,一般本科进来13级也OK,毕竟22岁年纪摆在那个地方还不需要太花钱。读硕博的基本26岁,工作两年就要结婚的,兜里没几个崽,连彩礼都要信用贷。菊厂离职的不少,毕竟正常没人受得了9116(梗:再来一次911刷6)。为啥这时候劝?因为刚下班,因为国考刚完,省考下周,就是可惜选调只有当年应届能报。现在回想能拍断大腿。应届生真实好身份,错过这一次,选调,考公,考编,当老师,进医院,研究所,高校,央国企,基本都无缘了,就连报名资格都被剥夺了,可谓是被党和国家遗弃的废材,统称“社会上的”,扔到社会去流浪,被用坏了就扔医院,长期超负载使用,零件修不好基本可以扔火里回炉重造了。体制内奉行找体制内的,都是党和国家选的人才,智力不差,样貌不丑,身材端正,收入稳定,安居房政策福利待遇也OK。因公出行都是报销,周末顺带“游山玩水“,这种体制内单身资源但凡想找对象,去社会上随便吆喝一声都排队。观察一下,基本没什么公务员在相亲,因为早就被邻里邻居抢光了。
哈哈哈,你是老六:就这不去的人大把人干呢,现在不缺人干活,你不干大把干呢,还有那个说农民工赚钱的,那个800+我估计肯定也就那一段时间,哪有这么赚钱,还是一句话,要想存下钱必须花销极低,能省的就不花钱,工资要高点
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务