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()) ...
随机推荐
- bzoj4337: BJOI2015 树的同构
hash大法好 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...
- Java之设计模式详解 (转)
转载:http://blog.csdn.net/zhangerqing/article/details/8194653 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模 ...
- PHP热身
0.环境说明 win10 xampp phpstorm xampp带了apache和mysql以及phpmyadmin 1.配置mysql:修改默认编码 关mysql xampp/mysql/bin/ ...
- MapReduce实现WordCount
package algorithm; import java.io.IOException; import java.util.StringTokenizer; import org.apache.h ...
- mysql为表添加外键完成性约束 报错Can't create table 'sfkbbs.#sql-513_25' (errno: 150)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtkAAAAyCAIAAAAGM1ChAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu
- 【poj1177】 Picture
http://poj.org/problem?id=1177 (题目链接) 题意 求矩形周长并. Solution 转自:http://www.cnblogs.com/Booble/archive/2 ...
- Jquery实现滚动到底部加载更多(最原始)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- shell 调试手段总结
对于厌烦了的 print 和 echo,可以尝试点新鲜省力的小手段. 1. 使用 shell 的执行选项 sh 和 bash 常用的执行指令有:-n.-x.-c.-v. 其中: -n 是 noexec ...
- POJ 2976 Dropping tests(最大化平均值 or 01整数规划)
题目链接 忽略运算符逻辑导致奇怪的错误(代码中指明位置了) 输出没加0.5,WA. 还有,注意特殊情况k=0,所以scanf("%d%d", &n, &k)& ...
- POJ 2739 Sum of Consecutive Prime Numbers(尺取法)
题目链接: 传送门 Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Description S ...