python 计算器的(正则匹配+递归)
2016-06-13 15:21
387 查看
经过2天的长时间的战斗,python计算器终于完成了。
import re val="1-2*((60-30*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" def chen(arg): f = arg # print (f) if "*" in arg or "/" in arg: '''如果包含*号或者除好则进如该方法''' b2_2 = re.search("\d+\.?\d*[*/]+-?\d+\.?\d*", arg) m = b2_2.group() k = re.split("([*/])", m, 1) kn = k[0] + '\\' + k[1] + k[2] if k[1] == '*': new_a = float(k[0]) * float(k[2]) f = re.sub(kn, str(new_a), arg) new_z = chen(f) return new_z elif k[1] == '/': new_a = float(k[0]) / float(k[2]) f = re.sub(kn, str(new_a), arg) new_z = chen(f) return new_z elif re.match("-+\d+\.?\d*[+-]+\d+\.?\d*",arg): '''如果是负数的减法则进如该方法''' m = re.search("-+\d+\.?\d*[+-]+\d+\.?\d*", arg).group() k = re.split("([+-])", m, 1) kt =re.split("([+-])", m, 2) kn = k[0] + '\\' + k[1] + k[2] aa = "%s%s" %(kt[1],kt[2]) if kt[3] == '-': new_a = float(aa) - float(kt[4]) f = re.sub(kn, str(new_a), arg) new_z = chen(f) return new_z elif re.search("\d+\.?\d*[+-]+\d+\.?\d*", arg): '''如果是 加号和减号则进如该方法''' # b2_2 = re.search("\d+\.*\d*[+-]+\d+\.*\d*", arg) b2_2 = re.search("\d+\.?\d*[+-]+\d+\.?\d*", arg) m = b2_2.group() k = re.split("([+-])", m, 1) kn = k[0] + '\\' + k[1] + k[2] # print (k) if k[1] == '+': new_a = float(k[0]) + float(k[2]) f = re.sub(kn, str(new_a), arg) new_z = chen(f) return new_z elif k[1] == '-': new_a = float(k[0]) - float(k[2]) f = re.sub(kn, str(new_a), arg) new_z = chen(f) return new_z return f #b = re.split("\(([^()]+)\)",val,1) while True: b = re.split("\(([^()]+)\)", val, 1) if len(b) == 3: # print (b) a1,a2,a3=b chen1=chen(a2) val = "%s%s%s" %(a1,chen1,a3) else: val=chen(val) print (val) break
相关文章推荐
- Python正则匹配递归获得给出目录下的特定类型的文件小技巧
- Python正则表达式的几种匹配用法
- python正则表达式匹配sql语句中的表名
- python BeautifulSoup 正则匹配糗事百科并保存到本地
- python与自然语言处理1 正则匹配
- Python-正则表达式多次匹配
- Python 3 正则表达式对中文的匹配
- Learning Python 008 正则表达式-007 匹配的字符串模板中如果只有前面有字符串,而后面没有字符串时,这个匹配模板要怎 么写
- python re 正则表达式总结 匹配指定字符
- python 正则表达式匹配字符串末尾的错误
- PyCon 2011 - Hidden Treasures of the Python Standard Library - 邮件地址正则表达式匹配
- python里使用正则表达式的组匹配自引用
- python 正则匹配(零宽断言)
- Python-正则表达式实现计算器功能
- Python正则表达式匹配日期与时间
- python中如何用正则表达式匹配汉字
- Python 正则匹配(re)组的应用
- Python学习(三):迭代器、生成器、装饰器、递归、算法、正则
- Python-同时匹配邮箱和电话号码的正则表达式
- .net c# 正则表达式 平衡组/递归匹配