計算下面表示式最後的結果
strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
#### 正則計算器
import
restrvar = "
1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"#
2776672.6952380957
#strvar = "-30+(40+5*-2+3/2)*8 + (4- 7) "
print(eval(strvar)) #
2776672.6952380957
#處理符號
defsign_exp(strvar):
strvar = strvar.replace("
+-","-"
) strvar = strvar.replace("
--","+"
) strvar = strvar.replace("
-+","-"
) strvar = strvar.replace("
++","+"
)
return
strvar
#計算表示式
defcalc_exp(strvar):
#判斷字串是 乘法 還是 除法if"
*"instrvar:
a,b = strvar.split("*"
)
return float(a) *float(b)
if"/"
instrvar:
a,b = strvar.split("/"
)
return float(a) /float(b)
#操作表示式
defopreate_exp(strvar):
#先算乘除
while
true:
#(40+5*-2+3/2)
#匹配 [誰*誰] 或者 [誰/誰] 例: 5*-2 3/2
obj = re.search(r"
\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?
",strvar)
ifobj:
res1 =obj.group()
#print(res1) # 5*-2
#計算表示式的結果
res2 =calc_exp(res1)
#print(res2 , type(res2)) # -10.0
#將所得的結果,替換到原來的字串當中,以匹配下乙個乘法或者除法
strvar =strvar.replace(res1,str(res2))
#print(strvar) # (40+-10.0+3/2)
else
:
#當obj 返回none的時候停止
break
#處理表示式中的符號
strvar =sign_exp(strvar)
#print(strvar) # (40+-10.0+1.5) (40-10.0+1.5)
#計算剩下+-的表示式(將每乙個數字匹配出來,做累加)
lst = re.findall("
[+-]?\d+(?:\.\d+)?
",strvar)
#print(lst) # ['40', '-10.0', '+1.5']
total =0
for i in
lst:
total +=float(i)
#print(total) # 31.5
return
total
#移除括號
defremove_bracket(strvar):
while
true:
obj = re.search("
\([^()]+\)
",strvar)
#print(obj)
ifobj:
res1 =obj.group()
#print(res1) # (40+5*-2+3/2) "-30+(40+5*-2+3/2)*8 +(4-7)"
#計算乙個括號裡面表示式的值
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 #
返回一串沒有括號的表示式
#main函式當中不寫邏輯,只呼叫相關的功能
defmain(strvar):
#1.整理資料,把沒用的空格去掉
strvar = strvar.replace("
",""
)
#2.移除所有括號
strvar =remove_bracket(strvar)
#print(strvar) # -30+31.5*8+-3.0
#3.計算表示式
return
opreate_exp(strvar)
res =main(strvar)
print(res)
每日演算法 day 19
那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.2 先將十六進製制轉化為二進位制 二進位制每四位可以表示乙個十六進製制的數字 ...
day19 學習總結
今天學習了陣列的使用和多維陣列。下面是知識點 package com.liangwenwei.陣列 public class 陣列的使用 列印全部陣列元素 for int i 0 i arrays.length i system.out.println 列印全部陣列元素 for int array ...
Day19 兩數相除
返回被除數 dividend 除以除數 divisor 得到的商。整數除法的結果應當截去 truncate 其小數部分,例如 truncate 8.345 8 以及 truncate 2.7335 2 示例1 輸入 dividend 10,divisor 3 輸出 3 解釋 10 3 truncat...