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()) ...
随机推荐
- C#-面向对象——如何调用使用类 普通方法、静态方法的使用
类的调用使用 新建的类的命名空间与主函数的命名空间默认相同,如果不同,则主函数无法调用自定义类 比如: 只需要进行引用即可 如果不知道方法的类名,可以右键鼠标 → 解析 → using 即可 普通方法 ...
- dede使用方法----调用导航
在这里,极力推荐学习dede的朋友们观看老李的零基础织梦仿站系列课程的视频,讲的超级棒的~~ 网址链接是:http://www.dede888.com/15daylessons.html. 好了,言归 ...
- iis Server Error in '/' Application
1.开始-运行-cmd-输入cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-回车-aspnet_regiis.exe -i 回车 2.如果不是检查链接 ...
- SQLite数据库的基本操作
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...
- Linux 爬虫
curl https://www.msi.umn.edu/tutorial-materials >tmp.txt perl -alne '{/(https.*?pdf)/;print $1 if ...
- Java多线程与并发库高级应用-线程池
线程池 线程池的思想 线程池的概念与Executors类的应用 > 创建固定大小的线程池 > 创建缓存线程池 > 创建单一线程池(如何实现线程死掉后重新启动?) 关闭线程池 > ...
- 数论专项测试——约数个数和(lucas的数论)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- Linux Module
catalog . 概述 . 使用模块 . 插入和删除模块 . 自动化与热插拔 . 版本控制 1. 概述 模块(module)是一种向Linux内核添加设备驱动程序.文件系统及其他组件的有效方法,而无 ...
- 数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树
一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈 ...
- 数据结构算法C语言实现(十四)--- 4.1&4.2串的类型定义、表示及实现
一.简述 [暂无] 二.头文件 //4_2_part1.h /** author:zhaoyu */ //2016-6-10 //----串的定长顺序存储表示---- #include "h ...