一次性計算出加減乘除的運算小程式

2021-10-18 11:20:07 字數 2505 閱讀 9436

廢話不多說,老規矩直接上**

import re

# 處理字串中的符號

defsign_exp

(strvar)

: strvar = strvar.replace(

"+-"

,"-"

) strvar = strvar.replace(

"--"

,"+"

) strvar = strvar.replace(

"-+"

,"-"

) strvar = strvar.replace(

"++"

,"+"

)return strvar

# 計算表示式

defcalc_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)# 一次性把括號裡面所有內容全部計算完畢

defopreate_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 =

0for i in lst:

total +=

float

(i)print

(total)

# 30.0

return total

defremove_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

defmain

(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)

)

轉貼 一次性安裝php的軟體

一次性安裝php的軟體 foxserv 開發商http www.foxserv.net apache2triad 開發商http apache2triad.sourceforge.net wamp 開發商http www.e novative.de mysql 3.23.49 phpmyadmin ...

全域性一次性引用寫好的元件

我們寫好了元件,接下去肯定還要引入和使用。但是你寫的元件一旦多起來,在每乙個個地方都需要去引用是一件很麻煩的事情,所以我們將一次性全域性引入 important componenta from componenta important componentb from componentb impor...

實現一次性驗證碼的校驗

建立乙個servlet隨機生成認證碼 輸出隨機認證碼 1.設定背景色 private void setbackground graphics graphics 2.設定邊框 private void setborder graphics graphics 3.畫干擾線 private void dr...