import re
def tokenize(s):
return re.findall(r'\+|-|\*|=|\d+', s)
def evaluate(stack):
return eval(''.join(stack))
def calc(e):
stack = ['0']
for token in tokenize(e):
if token.isdigit():
if stack[-1].isdigit():
stack[-1] = token
else:
stack.append(token)
elif token in '+-*':
if stack[-1] in '+-*':
stack[-1] = token
else:
stack.append(token)
elif token == '=':
stack = [str(evaluate(stack))]
try:
return int(stack[-1])
except ValueError:
return evaluate(stack[:-1])
def test():
assert calc("5") == 5
assert calc("5+") == 5
assert calc("5+3") == 3
assert calc("5+3=") == 8
assert calc("5*-3=") == 2
assert calc("5-3+") == 2
assert calc("5-3*2=") == -1
assert calc("") == 0
assert calc("-10=") == -10
assert calc("*10=") == 0
assert calc("4+3=2=") == 2
assert calc("4+3=*2=") == 14
if __name__ == '__main__':
test()
aW1wb3J0IHJlCgoKZGVmIHRva2VuaXplKHMpOgogICAgcmV0dXJuIHJlLmZpbmRhbGwocidcK3wtfFwqfD18XGQrJywgcykKCgpkZWYgZXZhbHVhdGUoc3RhY2spOgogICAgcmV0dXJuIGV2YWwoJycuam9pbihzdGFjaykpCgoKZGVmIGNhbGMoZSk6CiAgICBzdGFjayA9IFsnMCddCiAgICBmb3IgdG9rZW4gaW4gdG9rZW5pemUoZSk6CiAgICAgICAgaWYgdG9rZW4uaXNkaWdpdCgpOgogICAgICAgICAgICBpZiBzdGFja1stMV0uaXNkaWdpdCgpOgogICAgICAgICAgICAgICAgc3RhY2tbLTFdID0gdG9rZW4KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZCh0b2tlbikKICAgICAgICBlbGlmIHRva2VuIGluICcrLSonOgogICAgICAgICAgICBpZiBzdGFja1stMV0gaW4gJystKic6CiAgICAgICAgICAgICAgICBzdGFja1stMV0gPSB0b2tlbgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKHRva2VuKQogICAgICAgIGVsaWYgdG9rZW4gPT0gJz0nOgogICAgICAgICAgICBzdGFjayA9IFtzdHIoZXZhbHVhdGUoc3RhY2spKV0KICAgIHRyeToKICAgICAgICByZXR1cm4gaW50KHN0YWNrWy0xXSkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIHJldHVybiBldmFsdWF0ZShzdGFja1s6LTFdKQoKCmRlZiB0ZXN0KCk6CiAgICBhc3NlcnQgY2FsYygiNSIpID09IDUKICAgIGFzc2VydCBjYWxjKCI1KyIpID09IDUKICAgIGFzc2VydCBjYWxjKCI1KzMiKSA9PSAzCiAgICBhc3NlcnQgY2FsYygiNSszPSIpID09IDgKCiAgICBhc3NlcnQgY2FsYygiNSotMz0iKSA9PSAyCiAgICBhc3NlcnQgY2FsYygiNS0zKyIpID09IDIKICAgIGFzc2VydCBjYWxjKCI1LTMqMj0iKSA9PSAtMQoKICAgIGFzc2VydCBjYWxjKCIiKSA9PSAwCiAgICBhc3NlcnQgY2FsYygiLTEwPSIpID09IC0xMAogICAgYXNzZXJ0IGNhbGMoIioxMD0iKSA9PSAwCgogICAgYXNzZXJ0IGNhbGMoIjQrMz0yPSIpID09IDIKICAgIGFzc2VydCBjYWxjKCI0KzM9KjI9IikgPT0gMTQKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgdGVzdCgp