博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算器-- 利用re模块 利用函数封装 第二版
阅读量:5292 次
发布时间:2019-06-14

本文共 2604 字,大约阅读时间需要 8 分钟。

1 import re 2 remove_parentheses = re.compile('\([^()]+\)') 3  4 def Remove_Parentheses(obj, s):  # 找到内层的括号并且返回单个括号 5     while obj.search(s): 6         ret = obj.search(s).group() 7         if ('*'in ret) or ('/' in ret):  # 判断括号里是否有乘法 除法 8             ret1 = ride_div(ret)      # 有则调用 ride_div() 函数 9             s = s.replace(ret, ret1)    # 把乘法后的返回值进行重新赋值, 在乘法的函数里 还调用了加减法的函数, 详情看往下看.10         else:11             ret2 = add_sub(ret)      # 若没有 乘除法 则直接调用 加减法的函数 add_sub()12             s = s.replace(ret, ret2)    #把加减法后的返回值 重新赋值.13     return s14 15 16 def ride_div(s):  # 求乘除法的值17     while re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?', s):   #用 search判断 若不是None则继续进行18         minus(s)                          # 此函数是为了把 -- -+ +- ++ 替换成 单个的19         ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?', s).group()  20         a, d ,b = re.split('([/*])', ret)21         if d == '*':22             sum = float(a) * float(b)23             s = s.replace(ret, str(sum))      # 把得到的积 重新赋值24         elif d == '/':25             sum = float(a) / float(b)26             s = s.replace(ret, str(sum))       # 把得到的商 重新赋值27     else:28         ret_new = add_sub(s)            # 此处是为了当while 条件为None时 调用加减法, 把值相加或相减29     return ret_new.strip('(').strip(')')  # 最后得到一个数字 进行返回30 31 32 33 def add_sub(s): # 求加减的值34     while re.search('-?\d+(\.\d+)?[+-]-?\d+(\.\d+)?', s):35         s = minus(s)36         ret = re.search('(?P-?\d+(\.\d+)?)(?P
[+-])(?P
-?\d+(\.\d+)?)', s) # 此处,因为用切割的话 会有bug, 所以选择了用 分组的命名37 a = ret.group('a')38 d = ret.group('d')39 b = ret.group('b')40 if d == '+':41 sum = float(a) + float(b)42 elif d == '-':43 sum = float(a) - float(b)44 s = s.replace(ret.group(0), str(sum))45 s = s.strip('(').strip(')')46 return s47 48 49 def minus(s): #更改 不和谐的 符号50 while ('--' in s) or ('-+' in s) or ('+-' in s) or ('++' in s) :51 s = s.replace('--','+')52 s = s.replace('-+','-')53 s = s.replace('+-','-')54 s = s.replace('++','+')55 return s56 57 58 def main(): # 主函数59 while 1:60 s = input('请输入你要计算的式子,输入回车退出程序:').strip().replace(' ', '')61 if not s:62 break63 if "(" in s:64 ret1 = Remove_Parentheses(remove_parentheses, s)65 ret2 = ride_div(ret1)66 ret3 = add_sub(ret2)67 print(ret3)68 else:69 ret2 = ride_div(s)70 ret3 = add_sub(ret2)71 print(ret3)72 73 main()

 

转载于:https://www.cnblogs.com/Fushengliangnian/p/9307474.html

你可能感兴趣的文章
Win7中不能调试windows service
查看>>
T-SQL触发器,限制一次只能删除一条数据
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>
机器学习基石(9)--Linear Regression
查看>>
Min Stack
查看>>