0x1 前言
跟上一個購物車一樣的玩法,也都挺簡單的,看標題意思就懂了,不做多介紹了
0x2 加減乘除的運算小程式
import re # 處理字串中的符號 def sign_exp(strvar): strvar = strvar.replace("+-","-") strvar = strvar.replace("--","+") strvar = strvar.replace("-+","-") strvar = strvar.replace("++","+") return strvar # 計算運算式 def calc_exp(strvar): if "*" in strvar: a,b = strvar.split("*") return float(a) * float(b) if "/" in strvar: a,b = strvar.split("/") return float(a) / float(b) # 一次性把括號里面所有內容全部計算完畢 def opreate_exp(strvar): # 先計算乘除 while True: obj = re.search("\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?",strvar) if obj : res1 = obj.group() print(res1) # 5*-2 3/2 # 用calc_exp進行計算最后的結果 res2 = calc_exp(res1) print(res2) # -10.0 1.5 strvar = strvar.replace(res1,str(res2)) print(strvar) else: break # 處理運算式當中的符號 strvar = sign_exp(strvar) print(strvar) # 在計算加減 lst = re.findall("[+-]?\d+(?:\.\d+)?",strvar) print(lst) # 得到最后的值回傳 total = 0 for i in lst: total += float(i) print(total) # 30.0 return total def remove_bracket(strvar): while True: obj = re.search(r"\([^()]+\)",strvar) print(obj) if obj: res1 = obj.group() print(res1) # (40+5*-2+3/2) # 計算運算式里面的值 res2 = opreate_exp(res1) print(res2) # 31.5 # 把原來的括號替換掉 strvar = strvar.replace(res1,str(res2)) # print(strvar) # -30+31.5*8 + (4-7) else: return strvar def main(strvar): # 0.把所有的空格去掉 strvar = strvar.replace(" ","") # 1.去除小括號 strvar = remove_bracket(strvar) # 2.計算運算式 # print(strvar) # -30+31.5*8+-3.0 return opreate_exp(strvar) # strvar = "-30+(40+5*-2+3/2)*8 + (4-7)" strvar = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))' res = main(strvar) print(res)# 2776672.6952380957 print(eval(strvar))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540340.html
標籤:Python
