计算器-- 利用re模块 利用函数封装 第二版

Posted fushengliangnian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算器-- 利用re模块 利用函数封装 第二版相关的知识,希望对你有一定的参考价值。

 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 s
14 
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<a>-?d+(.d+)?)(?P<d>[+-])(?P<b>-?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 s
47 
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 s
56 
57 
58 def main():  # 主函数
59     while 1:
60         s = input(请输入你要计算的式子,输入回车退出程序:).strip().replace( , ‘‘)
61         if not s:
62             break
63         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()

 

以上是关于计算器-- 利用re模块 利用函数封装 第二版的主要内容,如果未能解决你的问题,请参考以下文章

利用python进行数据分析第二版 (Python的数据结构,函数和文件)1-1 数据结构和序列

利用Python进行数据分析(第二版)电子版书籍分享

分享《利用Python进行数据分析(第二版)》+源码+Wes Mckinney+SeanCheney

李航统计学习方法(第二版):决策树简介

《利用Python进行数据分析(第二版)》高清中文版PDF+高清英文版PDF+配套源代码

分享《利用Python进行数据分析(第二版)》高清中文版PDF+高清英文版PDF+源代码