Skip to content

Commit 54061e4

Browse files
authored
Update Basic Calculator.py
1 parent 7f25312 commit 54061e4

File tree

1 file changed

+32
-25
lines changed

1 file changed

+32
-25
lines changed

Basic Calculator.py

+32-25
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,36 @@ def calculate(self, s):
2626
:type s: str
2727
:rtype: int
2828
"""
29-
30-
res = 0
31-
signs = [1, 1]
32-
i = 0
33-
while i < len(s):
34-
if s[i].isdigit():
35-
start = i
36-
i += 1
37-
while i < len(s) and s[i].isdigit():
38-
i += 1
39-
res += signs.pop() * int(s[start:i])
40-
elif s[i] == '+':
41-
signs.append(signs[-1])
42-
i += 1
43-
elif s[i] == '-':
44-
signs.append(-signs[-1])
45-
i += 1
46-
elif s[i] == '(':
47-
signs.append(signs[-1])
48-
i += 1
49-
elif s[i] == ')':
50-
signs.pop()
51-
i += 1
29+
s = s.replace(' ', '')
30+
return self.cal(s, 0)[0]
31+
32+
def update(self, stack, op, tmp):
33+
if op == '+':
34+
stack.append(tmp)
35+
elif op == '-':
36+
stack.append(-tmp)
37+
elif op == '*':
38+
stack[-1] *= tmp
39+
elif op == '/':
40+
stack[-1] //= tmp
41+
42+
def cal(self, s, idx):
43+
stack = []
44+
op = '+'
45+
tmp = 0
46+
while idx < len(s):
47+
if s[idx].isdigit():
48+
tmp = tmp * 10 + int(s[idx])
49+
idx += 1
50+
elif s[idx] == '(':
51+
tmp, idx = self.cal(s, idx+1)
52+
elif s[idx] == ')':
53+
self.update(stack, op, tmp)
54+
return sum(stack), idx+1
5255
else:
53-
i += 1
54-
return res
56+
self.update(stack, op, tmp)
57+
op = s[idx]
58+
tmp = 0
59+
idx += 1
60+
self.update(stack, op, tmp)
61+
return sum(stack), idx

0 commit comments

Comments
 (0)