#(1)无小括号
#(2)有小括号
import collections
class Solution:
def calculate(self, s: str) -> int:
print(value(str,0)[0])
def value(str,i):#返回长度为2的数组,返回计算结果和算到的位置
que=collections.deque()
pre=0 #收集数字
while i<len(str) and str[i]!=")":
if str[i]>="0" and str[i]<="9": #收集数字
pre=pre*10+int(str[i])
i+=1
elif str[i]!="(": #遇到了+-*/
addnum(que,pre) #把之前的数字放进去
que.append(str[i]) #把符号放进去
i+=1
pre=0
else: #遇到了(
bra=value(str,i+1) #递归
pre=bra[0] #返回计算得到的值
i=bra[1]+1 #返回算到的位置
addnum(que,pre)
return [getnum(que),i]
def addnum(que,num):
if que:
top=que.pop()
if top=="+" or top=="-":
que.append(top)
else:
cur=int(que.pop())
if top=="*":
num=cur*num
else:
num=cur/num
que.append(int(num))
def getnum(que):
res=0
add=True
while que:
cur=que.popleft()
if cur=="+":
add=True
elif cur=="-":
add=False
else:
num=int(cur)
if add:
res+=num
else:
res-=num
return res
计算一个式子的值
猜你喜欢
转载自blog.csdn.net/weixin_40876685/article/details/89069926
今日推荐
周排行