华为笔试9月20日100+100+90

机试前两题不难,第三题坑好多,最后也没AK

做了个比较简洁的实现,用python的locals()+eval(),其实可以很好处理加减乘除。

import sys
d = locals()
for line in sys.stdin:
    line = line.strip().replace("/", "//")
    if line.startswith("let"):
        try:
            name, expr = line[4:].split(" = ")
            # d[name] = eval(expr)
            l = expr.split()
            while len(l) > 2:
                x = eval(" ".join(l[:3]))
                l = [str(x)] + l[3:]
            if not name.isidentifier() or len(l) != 1:
                raise SyntaxError
            d[name] = int(l[0])
        except NameError:
            d[name] = "UNDEF"
        except:
            print("<syntax-error>")
    elif line.startswith("out"):
        name = line[4:-1]
        if not name.isidentifier():
            print("<syntax-error>")
        elif name not in d or d[name] == "UNDEF":
            print("<undefined>")
        elif d[name] < -2147483648:
            print("<underflow>")
        elif d[name] > 2147483647:
            print("<overflow>")
        else:
            print(d[name])
    else:
        print("<syntax-error>")

#华为#
全部评论
举办了哥,我才100+45+45
3 回复 分享
发布于 2023-09-20 22:15 北京
这代码写的真漂亮
2 回复 分享
发布于 2023-09-21 03:25 浙江
这代码太简洁了 大佬
点赞 回复 分享
发布于 2023-09-21 23:10 北京

相关推荐

卡卡罗特ovo:说起云智我就来气,约好了一面,结果面试官没来,ssob上问hr也未读,我还是专门请了半天假在家面试,恶心死了
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
5
13
分享

创作者周榜

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