题解 | #表达式求值#
表达式求值
http://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
import sys
import re
p = r"[\+]+"
p0 = r"\([\.0-9\+\-\*\/]+\)"
p1 = r"(\-?[\.0-9]+)([\*\/]{1})(\-?[\.0-9]+)"
p2 = r"(\-?[\.0-9]+)([\+\-]{1})(\-?[\.0-9]+)"
# 按照括号、乘除、加减的顺序进行递归,需要注意的就是减号既可以是单目运算符也可以是二目运算符。
def run(a: str):
if a.isdigit() or (a[1:].isdigit() and a[0]=="-"):
return a
a0 = re.search(p0, a)
if a0:
s, e = a0.start(0), a0.end(0)
b = run(a[s+1:e-1])
a = a[:s]+b+a[e:]
return run(a)
a0 = re.search(p1, a)
if a0:
s = a0.start(1)
e = a0.end(3)
if a0.groups()[1] == "*":
b = str(int(a0.groups()[0])*int(a0.groups()[2]))
elif a0.groups()[1] == "/":
b = str(int(a0.groups()[0])/int(a0.groups()[2]))
if len(a[:s]) > 0 and a[s-1].isdigit() and b[0].isdigit():
b = "+"+b
a = a[:s]+b+a[e:]
return run(a)
a0 = re.search(p2, a)
if a0:
s = a0.start(1)
e = a0.end(3)
if a0.groups()[1] == "+":
b = str(int(a0.groups()[0])+int(a0.groups()[2]))
elif a0.groups()[1] == "-":
b = str(int(a0.groups()[0])-int(a0.groups()[2]))
if len(a[:s]) > 0 and a[s-1].isdigit() and b[0].isdigit():
b = "+"+b
a = a[:s]+b+a[e:]
return run(a)
return a
for line in sys.stdin:
a = line.strip()
print(int(run(a)))