题解 | #四则运算#

四则运算

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

#能过纯属运气,大致就是算括号,从小到大算起,先求小括号内部,再求中括号内部,再求大括号内部

a = input()
a = [i for i in a]
for i in range(len(a)):
    try:
        if a[i].isdigit() and a[i+1].isdigit():
            a[i] = a[i] + a[i+1]
            a[i+1] = ' '
    except:
        break
while True:
    try:
        a.remove(' ')
    except:
        break
while True:
    try:
        n1 = a.index('(')
    except:
        break
    for i in range(len(a))[n1+1:]:
        if a[i] == '(':
            n1 = i
        elif a[i] == ')':
            an = a[n1+1:i]
            while True:
                if '*' in an:
                    nw = an.index('*')
                    an[nw] = int(an[nw-1]) * int(an[nw+1])
                    an.pop(nw+1)
                    an.pop(nw-1)
                elif '/' in an:
                    nw = an.index('/')
                    an[nw] = int(an[nw - 1]) / int(an[nw + 1])
                    an.pop(nw + 1)
                    an.pop(nw - 1)
                else:
                    break
            b = [an[0]]
            for j in range(1, len(an)):
                if an[j] == '-':
                    b[0] = int(b[0]) - int(an[j + 1])
                elif an[j] == '+':
                    b[0] = int(b[0]) + int(an[j + 1])
            while i > n1:
                del a[i]
                i -= 1
            a[n1] = b[0]
            break
while True:
    try:
        n1 = a.index('[')
    except:
        break
    for i in range(len(a))[n1+1:]:
        if a[i] == '[':
            n1 = i
        elif a[i] == ']':
            an = a[n1+1:i]
            while True:
                if '*' in an:
                    nw = an.index('*')
                    an[nw] = int(an[nw-1]) * int(an[nw+1])
                    an.pop(nw+1)
                    an.pop(nw-1)
                elif '/' in an:
                    nw = an.index('/')
                    an[nw] = int(an[nw - 1]) / int(an[nw + 1])
                    an.pop(nw + 1)
                    an.pop(nw - 1)
                else:
                    break

            while True:
                if '+' in an:
                    nw = an.index('+')
                    an[nw] = int(an[nw-1]) + int(an[nw+1])
                    an.pop(nw+1)
                    an.pop(nw-1)
                elif '-' in an:
                    nw = an.index('-')
                    an[nw] = int(an[nw - 1]) - int(an[nw + 1])
                    an.pop(nw + 1)
                    an.pop(nw - 1)
                else:
                    break
            while i > n1:
                del a[i]
                i -= 1
            a[n1] = an[0]
            break
while True:
    try:
        n1 = a.index('{')
    except:
        break
    for i in range(len(a))[n1+1:]:
        if a[i] == '{':
            n1 = i
        elif a[i] == '}':
            an = a[n1+1:i]
            while True:
                if '*' in an:
                    nw = an.index('*')
                    an[nw] = int(an[nw-1]) * int(an[nw+1])
                    an.pop(nw+1)
                    an.pop(nw-1)
                elif '/' in an:
                    nw = an.index('/')
                    an[nw] = int(an[nw - 1]) / int(an[nw + 1])
                    an.pop(nw + 1)
                    an.pop(nw - 1)
                else:
                    break

            while True:
                if '+' in an:
                    nw = an.index('+')
                    an[nw] = int(an[nw-1]) + int(an[nw+1])
                    an.pop(nw+1)
                    an.pop(nw-1)
                elif '-' in an:
                    nw = an.index('-')
                    an[nw] = int(an[nw - 1]) - int(an[nw + 1])
                    an.pop(nw + 1)
                    an.pop(nw - 1)
                else:
                    break
            while i > n1:
                del a[i]
                i -= 1
            a[n1] = an[0]
            break


while True:
    if '*' in a:
        nw = a.index('*')
        a[nw] = int(a[nw - 1]) * int(a[nw + 1])
        a.pop(nw + 1)
        a.pop(nw - 1)
    elif '/' in a:
        nw = a.index('/')
        a[nw] = int(a[nw - 1]) / int(a[nw + 1])
        a.pop(nw + 1)
        a.pop(nw - 1)
    else:
        break
b = [a[0]]
for i in range(1, len(a)):
    if a[i] == '-':
        b[0] = int(b[0]) - int(a[i+1])
    elif a[i] == '+':
        b[0] = int(b[0]) + int(a[i + 1])
print(b[0])
全部评论
hahahahahaha
点赞 回复 分享
发布于 2023-08-09 21:09 山东

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
09-13 17:25
亲切的00后在笔试:我也遇到了,所以我早他一步查看图片
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

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