正則計算器 day19

2022-06-24 22:48:15 字數 2787 閱讀 9781

計算下面表示式最後的結果
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...