python(32)- 模块练习Ⅱ:使用正则表达式实现计算器的功能
开发一个简单的python计算器
实现加减乘除及拓号优先级解析
用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,
必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,
结果必须与真实的计算器所得出的结果一致
import re
def func(a):
while True:
if '*' in a:
c = a.split('*')
if '/' in c[0]:
a = div(a)
else:
a = mul(a)
elif '/' in a:
a = div(a)
else:
a = add(a)
return a
def mul(a):
b = re.search(r'\d+\.?\d*\*-?\d+\.?\d*', a)
if b:
b = b.group()
l=b.split("*")
c=float(l[0])*float(l[1])
res = re.sub(r'\d+\.?\d*\*-?\d+\.?\d*', str(c), a,1)
return res
def div(a):
b = re.search(r'\d+\.?\d*/-?\d+\.?\d*', a)
if b:
b = b.group()
l=b.split("/")
c=float(l[0])/float(l[1])
res = re.sub(r'\d+\.?\d*/-?\d+\.?\d*', str(c), a,1)
return res
def add(a):
if '--' in a:
a = a.replace('--', '+')
b = re.findall(r'-?\d+\.?\d*', a) #把负数两个字符看成一个整体
c=0
for i in b:
c+=float(i)
return c
def caculate():
a = ''.join(input('请输入计算公式如1-2*(60-30+(-40/5))等此类:').split())#把输入字符串以空格切片然后在拼接
while True:
if '(' in a:
b = re.search(r'\(([^()]+)\)', a)
if b:
c = b.group()
d = func(c)
a = re.sub(r'\(([^()]+)\)', str(d), a, 1)
else:
print(func(a))
break
caculate()
python(32)- 模块练习Ⅱ:使用正则表达式实现计算器的功能的更多相关文章
- python re 模块和基础正则表达式
1.迭代器:对象在其内部实现了iter(),__iter__()方法,可以用next方法实现自我遍历. 二.python正则表达式 1.python通过re模块支持正则表达式 2.查看当前系统有哪些p ...
- Python 常用模块之re 正则表达式的使用
re模块用来使用正则表达式.正则表达式用来对字符串进行搜索的工作.我们最应该掌握正则表达式的查询,更改,删除的功能.特别是做爬虫的时候,re模块就显得格外重要. 1.查询 import re a = ...
- python开发模块基础:正则表达式
一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置&q ...
- Python re模块前的正则表达式常用语法小总结
一.正则表达式: (1).正则表达式是干什么的 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或 ...
- python re模块常用的正则表达式
'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r&qu ...
- 用python twilio模块实现发手机短信的功能
前排提示:这个模块不是用于对陌生人进行短信轰炸和电话骚扰的,这个模块也没有这个功能,如果是抱着这个心态来的,可以关闭网页了 语言:python 步骤一:安装twilio模块 pip install t ...
- Python中模块之shutil及zipfile&tarfile的功能介绍
shutil的功能介绍及其他打包.压缩模块 1. shutil模块的方法 chown 更改指定路径的属组 2. copy 拷贝文件和权限 方法:shutil.copy(src,dst,*,follow ...
- Python之模块、正则
一.模块import 模块的实质就是把要导入模块里面的代码,从上到下执行一遍,找模块的顺序是,先从当前目录下找,找不到的话,再环境变量里面找导入的模块名字最好不要有.,a.import sysprin ...
- python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐
python hashlib模块 hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...
随机推荐
- Python socket粘包问题(初级解决办法)
server端配置: import socket,subprocess,struct from socket import * server=socket(AF_INET,SOCK_STREAM) s ...
- dp好题 玲珑杯 Expected value of the expression
152 - Expected value of the expression Time Limit:2s Memory Limit:128MByte Submissions:135Solved:65 ...
- Eclipse调试程序及项目的导入导出
Eclipse调试程序 调试概述: ① 调试就是测试程序的方法,主要的目的就是解决程序的逻辑问题,流程是:发现问题.修改问题.正确执行; ② 以前我们可以使用System.out.printl ...
- tcpdump 进行抓包
tcpdump 进行抓包是怎么回事? tcp抓包是怎么搞的?
- hdu2094 stl之set的应用
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- [图论训练]BZOJ 3245: 最快路线【最短路】
Description 精 明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知 道能开多快.不过有一个合理 ...
- html body width height 100%使用
首先我们来看一个实际的问题,让body中的一个div占全屏,(问题来源:http://stackoverflow.com/questions/1575141/make-div-100-height-o ...
- 【前端学习笔记】2015-09-06 ~~~~ setAttribute()、slice()
所遇记录: 1.setAttribute("属性",value),相同的还有addAttribute("属性名",value),getAttribute(“属性 ...
- Fedora 14 安装完后的设置 添加源 更新软件
1.添加源: (1)上海交大源:应用程序->系统工具->终端 输入 su 输入密码 输入 nano /etc/yum.repos.d/sjtu.repo 辅之以下内容: [F ...
- linux shmget shmctl
shmgetint shmget(key_t key, size_t size, int flag);key: 标识符的规则size:共享存储段的字节数flag:读写的权限返回值:成功返回共享存储的i ...