开发一个简单的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)- 模块练习Ⅱ:使用正则表达式实现计算器的功能的更多相关文章

  1. python re 模块和基础正则表达式

    1.迭代器:对象在其内部实现了iter(),__iter__()方法,可以用next方法实现自我遍历. 二.python正则表达式 1.python通过re模块支持正则表达式 2.查看当前系统有哪些p ...

  2. Python 常用模块之re 正则表达式的使用

    re模块用来使用正则表达式.正则表达式用来对字符串进行搜索的工作.我们最应该掌握正则表达式的查询,更改,删除的功能.特别是做爬虫的时候,re模块就显得格外重要. 1.查询 import re a = ...

  3. python开发模块基础:正则表达式

    一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置&q ...

  4. Python re模块前的正则表达式常用语法小总结

    一.正则表达式: (1).正则表达式是干什么的  正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或 ...

  5. python re模块常用的正则表达式

    '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r&qu ...

  6. 用python twilio模块实现发手机短信的功能

    前排提示:这个模块不是用于对陌生人进行短信轰炸和电话骚扰的,这个模块也没有这个功能,如果是抱着这个心态来的,可以关闭网页了 语言:python 步骤一:安装twilio模块 pip install t ...

  7. Python中模块之shutil及zipfile&tarfile的功能介绍

    shutil的功能介绍及其他打包.压缩模块 1. shutil模块的方法 chown 更改指定路径的属组 2. copy 拷贝文件和权限 方法:shutil.copy(src,dst,*,follow ...

  8. Python之模块、正则

    一.模块import 模块的实质就是把要导入模块里面的代码,从上到下执行一遍,找模块的顺序是,先从当前目录下找,找不到的话,再环境变量里面找导入的模块名字最好不要有.,a.import sysprin ...

  9. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

随机推荐

  1. 聊聊、Docker 安装

  2. 聊聊、Java Keytool P12 转 JKS

    最近公司合作机构需要更改服务证书,总共给了 3 个文件过来.openapi-cert.p12.openapi-cert.key.openapi-cert.crt. openapi-cert.crt - ...

  3. DS博客作业06--图

    1.本周学习总结 1.1.思维导图 1.2.谈谈你对图结构的认识及学习体会 本章学习了图结构的相关知识,图形结构属于复杂的非线性数据结构,在实际应用中很多问题可以用图来描述.在图结构中,每个元素可以有 ...

  4. POJ 1145 Tree Summing

    Tree Summing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7698   Accepted: 1737 Desc ...

  5. JDBC 学习笔记(七)—— CallableStatement

    在大型关系型数据库中,有一组为了完成特定功能的 SQL 语句集被称为存储过程(Stored Procedure),它是数据库中的对象. JDBC 使用 CallableStatement 对象,完成对 ...

  6. 解决ul的li横向排列换行的问题

    1. 问题现象 先看下面的html结构: <div> <ul> <li><img src='./img/1.jpg'></li> <l ...

  7. NOJ——聊天止于呵呵(string流重定向+map,水题)

    [1645] 聊天止于呵呵 时间限制: 5000 ms 内存限制: 65535 K 问题描述 (现代版)俗话说:流言止于智者,聊天止于呵呵.输入一段聊天记录,你的任务是数一数有 多少段对话“止于呵呵” ...

  8. HDU-3718 Similarity

    题目只有26个字母,所以我们新建一个二分图,v[i][j]表示字母i对应字母j时能成功匹配的个数,给这个边矩阵v求个最大匹配就是答案. #include <cstdlib> #includ ...

  9. jquery validate用法总结

    jquery validate是本人用过的最好用的验证组件,但其文档写的真是不敢恭维,现将一些常见用法总结如下(持续更新). 1. js触发表单验证 //触发整个表单的验证 $('form').val ...

  10. (转)关于Jackson2.x中com.fasterxml.jackson包的用法

    Jackson应该是目前最好的json解析工具了,之前一直用的是org.codehaus.jackson包中的工具,使用的 包是jackson-all-1.9.11.jar. 最近发现Jackson升 ...