# 1 - 2 * ((60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2)))# 通過python實現,自動判斷括號以及加減乘除的運算優先順序,得出運算結果,顯示運算步驟
importredef
atom_cal(exp):
if'*'
in exp: #
計算單個的乘法
a,b = exp.split('*'
)
return str(float(a) *float(b))
elif'/
'in exp: #
計算單個的除法
a, b = exp.split('/'
)
return str(float(a) /float(b))
def format_exp(exp): #
處理符號的問題
exp = exp.replace('
--','+'
) exp = exp.replace('
+-','-'
) exp = exp.replace('
-+','-'
) exp = exp.replace('
++','+'
)
return
expdef mul_div(exp): #
計算乘除法
while
true:
ret = re.search('
\d+(\.\d+)?[*/]-?\d+(\.\d+)?
',exp) #
利用正規表示式匹配乘或除法
if ret: #
如果匹配到的話
atom_exp = ret.group() #
將這個值拿出來
res = atom_cal(atom_exp) #
利用上面的atom_exp計算
exp = exp.replace(atom_exp,res) #
將計算的結果把原來演算法替換掉
else:return exp #
如果匹配不到的話說明乘除法計算完畢,返回計算結果
def add_sub(exp): #
計算加減法
ret = re.findall('
[+-]?\d+(?:\.\d+)?
', exp) #
利用正規表示式算式中的帶符號的每項數字,返回乙個列表
exp_sum =0
for i in
ret:
exp_sum += float(i) #
將列表中的每一項求和
return
exp_sum
def cal(exp): #
計算加減乘除混合運算
exp = mul_div(exp) #
呼叫mul_div函式先計算乘除法
exp = format_exp(exp) #
呼叫format_exp處理計算時候的符號
exp_sum = add_sub(exp) #
呼叫 add_sub計算加減法
return exp_sum #
float #返回計算結果
defmain(exp):
exp = exp.replace('
','') #
刪除字串中的空格
while
true:
ret = re.search('
\([^()]+\)
',exp) #
匹配括號
if ret : #
如果匹配到括號的話
inner_bracket = ret.group() #
將匹配到的括號內容取出來
res = str(cal(inner_bracket)) #
呼叫cal()計算括號中的內容,將返回結果轉換成字串
exp = exp.replace(inner_bracket,res) #
將匹配到的括號內容用計算器結果替換
exp = format_exp(exp) #
處理符號
else:break
#直到沒有括號跳出迴圈
return cal(exp) #
將剩下的內容進行計算,然後返回
s = '
1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
'ret =main(s)
print(ret,type(ret))
用c語言編寫乙個日期計算器
前提概述 用c語言 編寫乙個日期計算器思路 1 首先我要確定二個年份之間天數 當成滿年來看 j1值 2 然後我們再來確定月份 第一種是前年份的月份小於後年份的月份 那我們就先不看二個年份的本月份 計算二個年份除本月外還剩月份的天數 然後我們再加上前月份剩的天數和後月份過的天數。相加 第一種j2值 第...
物件導向編寫乙個計算器
首先分析計算器有加減乘除,取模,求餘等計算方式,所以我們在建立了這個類的同時就應該想到後期肯定需要進行這方面的擴充套件,所以在設計的時候就應該盡量不修改原有 的前提下進行功能的擴充套件,也就是降低物件之間的耦合度。廢話不多說,如下 namespace program public print dec...
用Python寫乙個閏年計算器
閏年的規則是,能夠被4整除,並且在為百年 例如1900年 的時候可以為400整除,就是閏年!基礎 是這樣的 year string input 請輸入要計算的年份 year int int year string if year int 4 0 if year int 100 0 if year i...