Python之简易计算器
2018-08-26 17:31:22来源:博客园 阅读 ()
思路:学会运用正则表达式把需要先进行计算的匹配出来,然后再一步步的去算,把先算出来的值替换原来的值,再进一步的把++,--等号变成我们正常的数学上的符号,然后再进行一步步的替换,最终把带括号的都计算出来,再调用一次加减函数进行计算
import re def atom_cal(exp): #计算乘除法 if "*" in exp: a,b = exp.split("*") #以*作切割,把切出来的两个值分别赋给a,b return str(float(a) * float(b)) #用float计算ab相乘的值并转换成字符串格式,便于计算 else: a,b = exp.split("/") #以/作切割,把切出来的两个值分别赋给a,b return str(float(a) / float(b)) def mul_div(exp): #乘除 while 1: ret = re.search("\d+(\.\d+)?[*/]-?\d+(\.\d+)?",exp) #把乘除法匹配出来 if ret: atom_exp = ret.group() #取第一个组匹配出来的乘除法 res = atom_cal(atom_exp) #调用atom_cal函数计算乘除法 exp = exp.replace(atom_exp,res) #替换 将计算出来的值与原式子替换 else:return exp #当没有相匹配的乘除法时,返回exp def format_exp(exp): #改变符号 exp = exp.replace("--","+") exp = exp.replace("-+","-") exp = exp.replace("+-","-") exp = exp.replace("++","+") return exp def add_sub(exp): #计算加减 ret = re.findall("[+-]?\d+(?:\.\d+)?",exp) #把能加减的匹配出来,包括小数,负数等 exp_sum = 0 for i in ret: exp_sum += float(i) #累加至exp_sum中返回 return exp_sum def cal(exp): exp = mul_div(exp) #乘除 exp = format_exp(exp) #变号 exp_sum = add_sub(exp) #加减 return exp_sum #float def main(exp): exp = exp.replace(" ","")#去空格 while 1: ret = re.search("\([^()]+\)",exp) #括号最里面的数 if ret: inner_bracket = ret.group() #取正则表达式匹配到的第一个组数 res = str(cal(inner_bracket)) #调用cal计算 exp = exp.replace(inner_bracket,res) #把算出来的值返回给括号 exp = format_exp(exp) #调用函数,变号 else:break return cal(exp) s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' print(main(s))
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash