首页 > 其他 > 详细

day4 homework calc1.py

时间:2016-02-18 13:44:09      阅读:150      评论:0      收藏:0      [点我收藏+]

实现计算器功能

 

计算 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))

当遇见括号时先计算括号内,使用正则匹配括号,如果遇见乘除先算乘除,并以乘除或者加减为分隔符,把数值整进列表内。

递归计算,当计算完一个值后把这个值替换到最初的字符串内。

处理当遇到以负数开头或者“--”时,多写了一点。

当以负数开头时又定义了一个函数,当出现“--”时,则把--搞成+

 

 

 

 

第一版的结果有问题,没注意

技术分享
  1 #!/usr/bin/env python
  2 # -*- encoding:utf-8 -*-
  3 
  4 import  re               #导入正则模块
  5 
  6 def tttt(data):             #定义计算的函数
  7     ‘‘‘
  8     调试的时候出现了“-”开头的东西,总是搞不掉,于是用if和正则多写了几个判断语句
  9     这一段为正常不带负数的判断
 10     之前是把最低下一段带有“-”的放在了上面,但是运行到-2+7*3这样的结构时,总是去先算加减,所以把“-”的仍到了下面
 11     ‘‘‘
 12     if re.match(\d+\.?\d*[\+\-\*\/]+\d+\.?\d*,data):         #如果匹配“正数字  加减乘除  数字”任何一中
 13         if re.search([\*\/],data):                               #如果匹配乘除,为了先算乘除
 14             aa = re.search((\d+\.?\d*)[\*\/]([\+\-]*\d+\.?\d*),data).group()
 15 
 16             if re.search(/,aa):
 17                 wukuohaolist = aa.split(/)
 18                 print(wukuohaolist)
 19                 chujieguo = float(wukuohaolist[0]) / float(wukuohaolist[1])
 20                 data = data.replace(aa,str(chujieguo))
 21                 print(data)
 22                 return tttt(data)
 23             if re.search(\*,aa):
 24                 wukuohaolist1 = aa.split(*)
 25                 print(wukuohaolist1)
 26                 chujieguo1 = float(wukuohaolist1[0]) * float(wukuohaolist1[1])
 27                 data = data.replace(aa,str(chujieguo1))
 28                 print(data)
 29                 return tttt(data)
 30         else:
 31             aa5 = re.search((\d+\.?\d*)[\+\-]+([\*\/]*\d+\.?\d*),data).group()
 32             if re.search(\+,aa5):
 33                 wukuohaolist = aa5.split(+)
 34                 print(wukuohaolist)
 35                 chujieguo = float(wukuohaolist[0]) + float(wukuohaolist[1])
 36                 data = data.replace(aa5,str(chujieguo))
 37                 print(data)
 38                 return tttt(data)
 39             if re.search(--,aa5):     #计算时会出现减去一个负数的情况,减去一个负数这时侯为加上这个正数,所以当匹配“--”时,让他们去相加
 40                 wukuohaolist1 = aa5.split(--)     #接上面,“--”和“-”匹配时有问题,所以把“-”扔到了“--”下面
 41                 print(wukuohaolist1)
 42                 chujieguo1 = float(wukuohaolist1[0]) + float(wukuohaolist1[1])
 43                 data = data.replace(aa5,str(chujieguo1))
 44                 print(data)
 45                 return tttt(data)
 46             if re.search(\-,aa5):
 47                     wukuohaolist1 = aa5.split(-)
 48                     print(vvcc,wukuohaolist1)
 49                     chujieguo1 = float(wukuohaolist1[0]) - float(wukuohaolist1[1])
 50                     data = data.replace(aa5,str(chujieguo1))
 51                     print(data)
 52                     return tttt(data)
 53 
 54     else:
 55         return data
 56 
 57 #以下为第二大段,当匹配到“-1*2+3”这样的结构时使用
 58     if re.search(\-\d+\.?\d*[\*\/]+\d+\.?\d*,data):
 59         if re.search(\-\d+\.?\d*[\*]\d+\.?\d*,data):
 60             aatest1 = re.search(\-\d+\.?\d*[\*]\d+\.?\d*,data).group()
 61             print(aatest1)
 62 
 63             wukuohaolist1111 = aatest1.split(*)
 64             jisuan1 = float(wukuohaolist1111[0]) * float(wukuohaolist1111[1])
 65             print(jisuan1)
 66             print(wukuohaolist1111)
 67             data = data.replace(aatest1,str(jisuan1))
 68             return tttt(data)
 69 
 70 
 71         else:
 72             aatest = re.search(\-\d+\.?\d*[\/]\d+\.?\d*,data).group()
 73             print(aatest)
 74             wukuohaolist111 = aatest.split(/)
 75             jisuan = float(wukuohaolist111[0]) / float(wukuohaolist111[1])
 76             print(wukuohaolist111)
 77             print(jisuan)
 78             data = data.replace(aatest,str(jisuan))
 79             return tttt(data)
 80 
 81 
 82     if re.search(\-\d+\.?\d*[\+\-]+\d+\.?\d*,data):
 83 
 84         if re.search(\-\d+\.?\d*^[\-\-]\d+\.?\d*,data):
 85             aatest1 = re.search(\-\d+\.?\d*[\-\-]\d+\.?\d*,data).group()
 86             wukuohaolist12 = aatest1.split(--)
 87             print(mmmmmmm,wukuohaolist12)
 88             chujieguo12 = float(wukuohaolist12[0]) + float(wukuohaolist12[1])
 89             data = data.replace(aatest1,str(chujieguo12))
 90             print(data)
 91             return tttt(data)
 92 
 93         if re.search(\-\d+\.?\d*[\-]\d+\.?\d*,data):
 94             aatest1 = re.search(\-\d+\.?\d*[\-]\d+\.?\d*,data).group()
 95             print(aatest1)
 96 
 97             wukuohaolist1111 = aatest1.split(-)
 98             jisuan1 = -(float(wukuohaolist1111[1]) + float(wukuohaolist1111[2]))
 99             print(jisuan1)
100             print(wukuohaolist1111)
101             data = data.replace(aatest1,str(jisuan1))
102             return tttt(data)
103 
104 
105         if re.search(\-\d+\.?\d*[\+]\d+\.?\d*,data):
106             aatest = re.search(\-\d+\.?\d*[\+]\d+\.?\d*,data).group()
107             print(aatest)
108             wukuohaolist111 = aatest.split(+)
109             jisuan = float(wukuohaolist111[0]) + float(wukuohaolist111[1])
110             print(wukuohaolist111)
111             print(jisuan)
112             data = data.replace(aatest,str(jisuan))
113             return tttt(data)
114 
115 #定义去除括号函数
116 def kuohao(daa):
117     if re.search(\(.+\),daa):
118         kuohaodata = re.search(\([^()]+\),daa).group()
119         print(kuohaodata,kuohaodata)
120         wukuohao = kuohaodata.strip(\(\))
121 
122         aa3 =  tttt(wukuohao)
123         print(aa3,aa3)
124         aa4 = daa.replace(kuohaodata,str(aa3))
125         print(aa4)
126     else:
127         return tttt(daa)
128     return kuohao(aa4)
129 
130 if __name__ == __main__:
131     print("输入以下内容:")
132     print(1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)))
133     daa = input(输入要计算的内容:)
134     daa = re.sub(\s*,‘‘,daa)
135 #    daa = ‘1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))‘
136 
137     kuohao(daa)
第一版

第二版修改一切正常

  1 #!/usr/bin/env python
  2 # -*- encoding:utf-8 -*-
  3 
  4 import  re               #导入正则模块
  5 
  6 def tttt(data):             #定义计算不带开头不带负数的函数
  7     ‘‘‘
  8    
  9     这一段为正常不带负数的判断
 10     计算的结果和事实不符,在第一版内去除括号计算时,到最后没有计算括号内的,而是直接脱去了括号和外面的相乘去了,于是把第一版的第二大段换成了函数,另加了一个函数做判断
 11     1-2*(-1388337.0476190478--4*3/10.0)
 12     kuohaodata (-1388337.0476190478--4*3/10.0)
 13     aa3 -1388337.0476190478--4*3/10.0
 14     1-2*-1388337.0476190478--4*3/10.0
 15     [‘2‘, ‘-1388337.0476190478‘]
 16     1--2776674.0952380956--4*3/10.0
 17     ‘‘‘
 18     if re.match(\d+\.?\d*[\+\-\*\/]+\d+\.?\d*,data):         #如果匹配“正数字  加减乘除  数字”任何一中
 19         if re.search([\*\/],data):                               #如果匹配乘除,为了先算乘除
 20             aa = re.search((\d+\.?\d*)[\*\/]([\+\-]*\d+\.?\d*),data).group()
 21 
 22             if re.search(/,aa):
 23                 wukuohaolist = aa.split(/)
 24                 print(wukuohaolist)
 25                 chujieguo = float(wukuohaolist[0]) / float(wukuohaolist[1])
 26                 data = data.replace(aa,str(chujieguo))
 27                 print(data)
 28                 return tttt(data)
 29             if re.search(\*,aa):
 30                 wukuohaolist1 = aa.split(*)
 31                 print(wukuohaolist1)
 32                 chujieguo1 = float(wukuohaolist1[0]) * float(wukuohaolist1[1])
 33                 data = data.replace(aa,str(chujieguo1))
 34                 print(data)
 35                 return tttt(data)
 36         else:
 37             aa5 = re.search((\d+\.?\d*)[\+\-]+([\*\/]*\d+\.?\d*),data).group()
 38             if re.search(\+,aa5):
 39                 wukuohaolist = aa5.split(+)
 40                 print(wukuohaolist)
 41                 chujieguo = float(wukuohaolist[0]) + float(wukuohaolist[1])
 42                 data = data.replace(aa5,str(chujieguo))
 43                 print(data)
 44                 return tttt(data)
 45             if re.search(--,aa5):     #计算时会出现减去一个负数的情况,减去一个负数这时侯为加上这个正数,所以当匹配“--”时,让他们去相加
 46                 wukuohaolist1 = aa5.split(--)     #接上面,“--”和“-”匹配时有问题,所以把“-”扔到了“--”下面
 47                 print(wukuohaolist1)
 48                 chujieguo1 = float(wukuohaolist1[0]) + float(wukuohaolist1[1])
 49                 data = data.replace(aa5,str(chujieguo1))
 50                 print(data)
 51                 return tttt(data)
 52             if re.search(\-,aa5):
 53                     wukuohaolist1 = aa5.split(-)
 54                     print(vvcc,wukuohaolist1)
 55                     chujieguo1 = float(wukuohaolist1[0]) - float(wukuohaolist1[1])
 56                     data = data.replace(aa5,str(chujieguo1))
 57                     print(data)
 58                     return tttt(data)
 59 
 60     else:
 61         return data
 62 
 63 #以下为第二大段,当匹配到“-1*2+3”这样的结构时使用 。第二个函数
 64 def tttt2(data):
 65     if re.match(\-\d+\.?\d*[\+\-\*\/]+\d+\.?\d*,data):         #如果匹配“正数字  加减乘除  数字”任何一中
 66         if re.search([\*\/],data):                               #如果匹配乘除,为了先算乘除
 67             aaa = re.search((\-\d+\.?\d*)[\*\/]([\+\-]*\d+\.?\d*),data).group()
 68 
 69             if re.search(/,aaa):
 70                 wukuohaolist = aaa.split(/)
 71                 print(wukuohaolist)
 72                 chujieguo = float(wukuohaolist[0]) / float(wukuohaolist[1])
 73                 data = data.replace(aaa,str(chujieguo))
 74                 print(data)
 75                 return tttt2(data)
 76             if re.search(\*,aaa):
 77                 wukuohaolist1 = aaa.split(*)
 78                 print(wukuohaolist1)
 79                 chujieguo1 = float(wukuohaolist1[0]) * float(wukuohaolist1[1])
 80                 data = data.replace(aaa,str(chujieguo1))
 81                 print(data)
 82                 return tttt2(data)
 83         else:
 84             aaa5 = re.search((\-\d+\.?\d*)[\+\-]+([\*\/]*\d+\.?\d*),data).group()
 85             if re.search(\+,aaa5):
 86                 wukuohaolist = aaa5.split(+)
 87                 print(wukuohaolist)
 88                 chujieguo = float(wukuohaolist[0]) + float(wukuohaolist[1])
 89                 data = data.replace(aaa5,str(chujieguo))
 90                 print(data)
 91                 return tttt2(data)
 92             if re.search(--,aaa5):     #计算时会出现减去一个负数的情况,减去一个负数这时侯为加上这个正数,所以当匹配“--”时,让他们去相加
 93                 wukuohaolist1 = aaa5.split(--)     #接上面,“--”和“-”匹配时有问题,所以把“-”扔到了“--”下面
 94                 print(wukuohaolist1)
 95                 chujieguo1 = float(wukuohaolist1[0]) + float(wukuohaolist1[1])
 96                 data = data.replace(aaa5,str(chujieguo1))
 97                 print(data)
 98                 return tttt2(data)
 99             if re.search(\-,aaa5):
100                     wukuohaolist1 = aaa5.split(-)
101                     print(jianjianjinjian,wukuohaolist1)
102                     chujieguo1 = float(wukuohaolist1[1]) + float(wukuohaolist1[2])
103                     data = data.replace(aaa5,str(-chujieguo1))
104                     print(data)
105                     return tttt2(data)
106 
107     else:
108         return data
109 
110 #另加的函数
111 
112 def jiaygie(data):
113     if  re.match(\d+\.?\d*[\+\-\*\/]+\d+\.?\d*,data):
114 #        tttt(data)
115         return tttt(data)
116     elif  re.match(\-\d+\.?\d*[\+\-\*\/]+\d+\.?\d*,data):
117 #        tttt2(data)
118         return  tttt2(data)
119     else:
120         return  data
121 #去除括号的函数
122 
123 def kuohao(daa):
124     if re.search(\(.+\),daa):
125         kuohaodata = re.search(\([^()]+\),daa).group()
126         print(kuohaodata,kuohaodata)
127         wukuohao = kuohaodata.strip(\(\))
128 
129         aa3 =  jiaygie(wukuohao)
130         print(aa3,aa3)
131         aa4 = daa.replace(kuohaodata,str(aa3))
132         print(aa4)
133     else:
134         return jiaygie(daa)
135     return kuohao(aa4)
136 
137 if __name__ == __main__:
138     print("输入以下内容:")
139     print(1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)))
140     daa = input(输入要计算的内容:)
141     daa = re.sub(\s*,‘‘,daa)
142 #    daa = ‘1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))‘
143 
144     kuohao(daa)

 

day4 homework calc1.py

原文:http://www.cnblogs.com/dribs/p/5197855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!