1def calculate(s):
2 stack = []; res = 0; sign = 1; op = 0
3 for ch in s:
4 if ch.isdigit(): op = op * 10 + int(ch)
5 elif ch == '+': res += sign * op; op = 0; sign = 1
6 elif ch == '-': res += sign * op; op = 0; sign = -1
7 elif ch == '(': stack.append(res); stack.append(sign); res = 0; sign = 1
8 elif ch == ')': res += sign * op; op = 0; res = stack.pop() * res + stack.pop()
9 return res + sign * op