python 计算器的(正则匹配+递归)
经过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】给正则匹配部分命名
可以用?P<name>的方法给正则匹配的部分命名. 例:要将<字母,数字>的部分命名为test x = "abc <haha,123> test @@&q ...
- Python正则匹配递归获得给出目录下的特定类型的文件小技巧
需求是酱的: 输入一个目录,这个目录包含检测目录的必备信息但不准确需要获得后加工一下,如给出目录:C:\Program Files\Common Files\DESIGNER,需要检测的目录是:C:\ ...
- 字符串正则匹配(递归/DP)
Wildcard-Matching & Regular Expression Matching Wildcard-Matching中?匹配任意一个字符,*匹配任意长度字符串包括空字符串 方法 ...
- Python之字符串正则匹配
需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says &q ...
- python使用findall正则匹配出所有符合条件的字符串
# -*- coding:utf-8 -*- import re mystr="qqq key:www.baidu.com<br>key:www.tengxun.com<b ...
- Python实例---利用正则实现计算器[FTL版]
import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- python 正则匹配中文(unicode)(转)
由于 需求原因,需要匹配 提取中文,大量google下,并没有我需要的.花了一个小时大概测试,此utf8中文通过,特留文. 参考: http://hi.baidu.com/nivrrex/blo ...
- 用python处理时间、utf8文本、正则匹配、序列化、目录路径搜索、xml解析
python 处理时间 import time import re now = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) ...
随机推荐
- 1.值得推荐的C/C++框架和库 (转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- [日常训练]curves
Description 小同学的弟弟小昨天学习了数学中的一元二次函数,但是由于学业不精,他一个晚上都在缠着小问一元二次函数的极值问题,小烦不可耐,于是,想请你帮忙弄个程序来应付小.程序要完成以下任务: ...
- [poj2406] Power Strings
Description 对于两个字符串a,b,定义a×b为将b接到a的末尾组成新的字符串.对于一个字符串a的幂运算的定义与我们在数学中的定义一样:a0=''(空字符),an+1=an×a. Input ...
- css-文本超出后显示省略号
1.如果是单行文本: overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 2.如果是多行文本,将文本框高度设为文字行高的倍数 ...
- 【BZOJ-1507】Editor 块状链表
1507: [NOI2003]Editor Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3397 Solved: 1360[Submit][Stat ...
- Hash_1014: [JSOI2008]火星人prefix
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- dedecms /member/edit_baseinfo.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 会员模块中存在的SQL注入 Relevant Link: http:// ...
- AngularJs ngClass、ngClassEven、ngClassOdd、ngStyle
这几个都关于样式及类名修改的,所以先把样式代码贴上吧. .red{color:red} .blue{color:blue} 写案例用到的样式就这么简单的两个,下面进入正题. ngClass ngCla ...
- hdu 2031 杨辉三角
题意:显示杨辉三角形. 解法: 组合数学公式:combi(n,m)=combi(n-1,m-1)+combi(n-1,m); 至于为什么有这个公式呢?那就是高中数学的内容啦 1: #include&l ...
- what's the CRSF ??
What's CSRF attack ? CSRF(" Cross-site request forgery!" 跨站请求伪造) 用实例讲原理: 我们假设一个银行网站A,一个 ...