经过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 计算器的(正则匹配+递归)的更多相关文章

  1. 【python】给正则匹配部分命名

    可以用?P<name>的方法给正则匹配的部分命名. 例:要将<字母,数字>的部分命名为test x = "abc <haha,123> test @@&q ...

  2. Python正则匹配递归获得给出目录下的特定类型的文件小技巧

    需求是酱的: 输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\ ...

  3. 字符串正则匹配(递归/DP)

    Wildcard-Matching &  Regular Expression Matching Wildcard-Matching中?匹配任意一个字符,*匹配任意长度字符串包括空字符串 方法 ...

  4. Python之字符串正则匹配

    需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says &q ...

  5. python使用findall正则匹配出所有符合条件的字符串

    # -*- coding:utf-8 -*- import re mystr="qqq key:www.baidu.com<br>key:www.tengxun.com<b ...

  6. Python实例---利用正则实现计算器[FTL版]

    import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...

  7. Python正则匹配字母大小写不敏感在读xml中的应用

    需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...

  8. python 正则匹配中文(unicode)(转)

    由于 需求原因,需要匹配 提取中文,大量google下,并没有我需要的.花了一个小时大概测试,此utf8中文通过,特留文.    参考: http://hi.baidu.com/nivrrex/blo ...

  9. 用python处理时间、utf8文本、正则匹配、序列化、目录路径搜索、xml解析

    python 处理时间 import time import re now = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) ...

随机推荐

  1. 生活就像测试, BUG会越来越少,生活会越来越好!

    生活就像测试, BUG会越来越少,生活会越来越好!

  2. 【BZOJ-1367】sequence 可并堆+中位数

    1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 932  Solved: 348[Submit][S ...

  3. Jenkins邮件配置,实现邮件发送策略(可实现每个Job对应不同的发送邮箱)

    前言: 首先,要有一个用来发送的邮箱,首选网易!参考:http://www.cnblogs.com/EasonJim/p/6051636.html,这里我注册了网易的免费企业邮箱. 并且我新建没多个邮 ...

  4. 洛谷P1889 士兵站队

    题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网格边上.下左右移动一步,但在同时刻任一网格点上只能有名士兵.按照军官的命令,们要整齐地列 ...

  5. QIBO CMS /inc/common.inc.php Local Variables Overriding Vul In $_FILES

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 齐博在/inc/common.inc.php使用$$_key=$value.ext ...

  6. array数组加过滤

    var array = new Array(); array.push(0); array.push(1); array.push(2); var arr = array.filter(functio ...

  7. win7、win8上SaveFileDialog窗口跳不出的问题

    xp上做的开一个线程 线程中数据以Excel形式保存到指定文件中的程序  放到win7 win8上都不跳出保存的对话框? 解决: 在win7.win8上都要对线程  在线程启动前设置其单元状态.设置为 ...

  8. TCP/IP详解 笔记十三

    TCP协议(一) 概述 特点 1,  面向连接可靠的字节流服务 2,  只有两方通信,不能用于广播或多播 3,  应用数据被TCP分隔为最合适发送的数据段,传给IP协议栈 4,  发送端并启动定时器, ...

  9. CF 702B Powers of Two(暴力)

    题目链接: 传送门 Devu and Partitioning of the Array time limit per test:3 second     memory limit per test: ...

  10. OpenGLES入门笔记三

    在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...