class Solution:
# 实现基本计算器使用栈的数据结构,首先找出来数字,保存下来。
# 然后碰到运算符,+ , - 直接压入栈里边,
# 碰到运算符 * 和 / 的情况下,说明前面已经有一个数值压入栈,并且 num 的值为运算符的后一个数字。
# 计算 * / 运算结果,并将计算后的结果压入栈里边。
def calculate(self, s: str) -> int:
# 定义变量字符串长度。
length = len(s)
# 定义栈,sign 运算符,num 用来暂时存放数字。
stack,sign,num = [],'+',0
# 进行遍历。
for index in range(length):
# 找到数字,
if '0' <= s[index] <= '9':
# 数字是多位数的情况。
num = num * 10 + int(s[index])
# 如果当前是运算符,注意,如果碰到当前是运算符,算的是上一个运算符的情况。
# 上一个运算符的第一个运算数在栈里边,第二个为num
if s[index] in '+-*/' or index == length - 1:
# 如果上一个运算符为 + - ,可以直接压入栈,
# 也可以计算一下在压入栈,但这样需要先向栈里边压入0.
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(-num)
# 乘法和除法运算符,一个运算数在栈里边,另一个为num。
elif sign == '*':
stack.append(stack.pop() * num)
else:
# 注意整除的时候,可能压入栈里边的运算数为负数,
# 因此需要考虑到负数的情况。这样来算整除。
stack.append(int(stack.pop() / num))
num = 0
sign = s[index]
return sum(stack)
A = Solution()
print(A.calculate("14-3/2"))