class Calculator:
def calculate(self,strs): #1+2-3
sign = 1
num = 0
res = 0
for i in strs:
if i.isdigit():
num = num*10+int(i)
if i == '+':
res+=sign*num
sign=1 #定的是将来的符号
num = 0
if i == '-':
res += sign * num
sign = -1
num = 0
if num:
res += sign * num #不要忘了最后一个符号
return res
c = Calculator()
ret = c.calculate("1999")
print(ret)
class Calculator:
def calculate(self,strs): #1+2-3
sign = 1
num = 0
res = 0
for i in strs:
if i.isdigit():
num = num*10+int(i)
if i == '+':
res+=sign*num
# this op is for future
sign=1
num = 0
if i == '-':
res += sign * num
sign = -1
num = 0
if num:
res += sign * num #don't forget last number
return res
#with stack
def calculate2(self,strs):
stack = []
sign = 1
num = res = 0
for i in strs:
if i.isdigit():
num += num * 10 + int(i)
elif i == '(':
stack.append(res)
stack.append(sign)
sign = 1
res = 0
elif i == ')':
res += num * sign
res = res*stack.pop()+stack.pop()
num = 0
elif i in '+-':
res += sign*num
num = 0
sign = 1 if i == '+' else -1
if num:
res += sign * num
return res
#with map
def calculate3(selfself,strs,map):
num=res =0
snum =[]
op = "+"
for i in strs:
if i.isdigit():
num = num*10+int(i) #not =+ wrong every time!!!!!!
elif i.isalpha():
if i in map:
num = map[i]
else:
snum.append(op+i)
elif i in '+-':
if i == '+':
res += num
else:
res-= num
num = 0
op = i
if num:
if op == '+':
res += num
else:
res -= num
return str(res) + ''.join(snum)
#
c = Calculator()
# ret = c.calculate("")#2+((8+2)+(3-999))
# print(ret)
ret = c.calculate2("2+((8+2)+(3-999))")
#ret = c.calculate3("x+a+b+f+c+1+d",{'a':1, 'b':2, 'c':3})#2+((8+2)+(3-999))
print(ret)