用函數寫一個計算器(親測完整版)
阿新 • • 發佈:2018-08-22
for code str float findall re.search bre exp +=
第一個函數算乘除法:
import re def 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 mul_div(exp): while True: ret = re.search(‘\d+(\.\d+)?[*/]-\d+(\.\d+)?‘,exp) if ret: atom_exp = ret.group() res = atom_cal(atom_exp) exp = exp.replace(atom_exp,res) else: return exp
第三個函數 格式化
def format_exp(exp): exp = exp.replace(‘--‘,‘+‘) exp = exp.replace(‘++‘,‘+‘) exp = exp.replace(‘+-‘,‘-‘) exp = exp.replace(‘-+‘,‘-‘) 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) exp = format_exp(exp) exp_sum = add_sub(exp)return exp_sum
第六個函數 計算主函數
def main(exp): exp = exp.replace(‘ ‘,‘‘) while 1: ret = re.search(‘\([^()]+\)‘,exp) if ret: inner_bracket = res.group() res = str(cal(inner_bracket)) exp = exp.replace(inner_bracket,res) else:break return cal(exp) ret = main(s) print(ret,type(ret))
以上代碼測試過,能夠正常使用,如發現異常,請留言,一起學習進步!
用函數寫一個計算器(親測完整版)