华为笔试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 北京

相关推荐

扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
5 13 评论
分享
牛客网
牛客企业服务