国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python正則實現計算器功能

2020-02-16 11:06:30
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python正則實現計算器功能的具體代碼,供大家參考,具體內容如下

# -*- coding: utf-8 -*- # Author  :Gogh # @Time   :2017/12/4 20:16 # @Email  :361910002@qq.com import re def operator_update(formula):   # 對formula公式進行 去除空字符,更新運算符處理   formula = formula.replace(" ", "") # 去除空字符   formula = formula.replace("+-", "-")   formula = formula.replace("--", "+")   return formula   def calc_muldiv(formula_list):   '''''   計算公式里面的乘除   :param formula: 列表   :return:   '''   for index, element in enumerate(formula_list):     if "*" in element or "/" in element:       operators = re.findall("[*/]", element)       calc_list = re.split("[*/]", element)       num = None       for i, e in enumerate(calc_list):         if num:           if operators[i - 1] == "*":             num *= float(e)           elif operators[i - 1] == "/":             num /= float(e)         else:           num = float(e)       formula_list[index] = num   return formula_list   def calc_plumin(operators, num_list):   '''''   計算列表數字的加減   :param operators: 運算符列表   :param num_list: 進行運算的數字列表   :return: 返回計算結果   '''   num = None   for i, e in enumerate(num_list):     if num:       if operators[i - 1] == "+":         num += float(e)       elif operators[i - 1] == "-":         num -= float(e)     else:       num = float(e)   return num   def merge(plus_minus_operator, multiply_divide_list):   '''''   把列表中這樣的形式'2*' '-3*' '5/3*' '4/2'合并到一塊   :param formula_list:   :return:   '''   for index, element in enumerate(multiply_divide_list):     if element.endswith("*") or element.endswith("/"):       multiply_divide_list[index] = element + plus_minus_operator[index] + multiply_divide_list[index + 1]       del multiply_divide_list[index + 1]       del plus_minus_operator[index]       return merge(plus_minus_operator, multiply_divide_list)   return plus_minus_operator, multiply_divide_list   def bracket_calc(formula):   '''''   對括號最內層的formula公式進行計算   :param formula:   :return:   '''   formula = re.sub("[()]", "", formula) # 去除兩邊的()   formula = operator_update(formula)   plus_minus_operator = re.findall("[+-]", formula) # 列表 '+' '-' 運算符   multiply_divide_list = re.split("[+-]", formula) # 列表 有'*' '/'   if multiply_divide_list[0] == "": # multiply_divide_list列表第一個字符為空的話,表示一個數字為負號     multiply_divide_list[1] = "-" + multiply_divide_list[1]     del plus_minus_operator[0]     del multiply_divide_list[0]   res = merge(plus_minus_operator, multiply_divide_list)   plus_minus_operator = res[0] # 列表 '+' '-' 運算符 進行合并處理   multiply_divide_list = res[1]   plus_minus_list = calc_muldiv(multiply_divide_list) # 生成只進行加減運算的列表   res = calc_plumin(plus_minus_operator, plus_minus_list)   return res   def calculate(formula):   '''''計算程序主入口, 主要邏輯是先計算拓號里的值,算出來后再算乘除,再算加減'''   while True:     formula_depth = re.search("[()]+", formula)     if formula_depth:       formula_depth = formula_depth.group()       res = bracket_calc(formula_depth)       formula = formula.replace(formula_depth, str(res))       print("/33[34;1m%s/33[0m" % (formula))     else:       res = bracket_calc(formula)       print("/33[31;1m結果:%s/33[0m" % (res))       exit()   if __name__ == '__main__':   formula = "1 - 2 * ( (60-30 +(-9-2- 5-2*-3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) -(-4*3)/ (16-3*2) )"   calculate(formula)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五河县| 元谋县| 九龙城区| 中山市| 工布江达县| 阿图什市| 柳江县| 徐闻县| 阿拉善右旗| 嵩明县| 通榆县| 永顺县| 边坝县| 青海省| 扎赉特旗| 横峰县| 道孚县| 剑河县| 略阳县| 武宣县| 泗阳县| 长泰县| 尚义县| 孟津县| 亚东县| 巴南区| 浙江省| 安丘市| 德阳市| 呼伦贝尔市| 浦城县| 元阳县| 安乡县| 临高县| 普宁市| 班玛县| 汝南县| 安达市| 富顺县| 镇沅| 长沙市|