直接上代码
#将输入的字符串转换为列表存储
def num_list(str):
a=str
symb = ["+", "-", "*", "/", "(", ")"]
for item in symb:
a = a.replace(item, " " + item + " ")
a = a.replace(" ", " ")
a=a.rstrip()
print(a)
return a.split(" ")
#加减乘除优先级运算
def calculate(list):
symb = ["+", "-", "*", "/", "(", ")"]
lst_num=list
while len(lst_num)>1:
if "*" in lst_num or "/" in lst_num:
for j in range(len(lst_num)):
if lst_num[j] is "*":
lst_num[j-1:j+2]=[float(lst_num[j-1])*float(lst_num[j+1])]
break
if lst_num[j] is "/":
lst_num[j-1:j+2]=[float(lst_num[j-1])/float(lst_num[j+1])]
break
else:
for j in range(len(lst_num)):
if lst_num[j] is "+":
lst_num[j-1:j+2]=[float(lst_num[j-1])+float(lst_num[j+1])]
break
if lst_num[j] is "-":
lst_num[j-1:j+2]=[float(lst_num[j-1])-float(lst_num[j+1])]
break
return lst_num
#递归处理括号
def sum_number(lst):
if(")" in lst):
r_index=lst.index(")")
lst_temp=lst[:r_index]
l_index=0
for i in range(len(lst_temp)):
if lst_temp[i] is "(":
l_index=i
lst_temp=lst[l_index+1:r_index]
lst[l_index:r_index+1]=calculate(lst_temp)
sum_number(lst)
return calculate(lst)
a = "3*((15+5)/2)-(2+3)-5/20+100*5/(5-4)"
lst=num_list(a)
print(sum_number(lst))