python 一个可耻的计算器,百行以内

  1 面对这些代码是压缩的,,但是很low这些代码,不过功能还是实现。
  2 import re
  3 def add(*args): #加法运算
  4     res = 0
  5     for i in args:
  6         res += float(i)
  7     return res
  8 def mult(*args): #乘法运算
  9     res = 1
 10     for i in args:
 11         res = res * i
 12     return res
 13 def divod(finum,*args): #除法运算
 14     for i in args:
 15         res = float(finum)/float(i)
 16     return res
 17 def subd(firnu,*args): #减法运算
 18     res = firnu
 19     for i in args:
 20         res = res -i
 21     return res
 22 def filterfuter(*args): #特殊运算符处理
 23     for i in args:
 24         i= i.replace('+-', '-').strip()
 25         i = i.replace('--', '+').strip()
 26         return i
 27 def funct(rs):  #入口函数
 28     sur = re.sub('\s+', '', rs)
 29     tmp1 = re.findall("\([^()]+\)", sur)[0]
 30     tmp = re.sub("[()]", '', tmp1)
 31     x, y = tmp.split("/",1)
 32     if (re.sub(tmp1, str(divod(x, y)), sur, 1)):
 33         return (re.sub(tmp1, str(divod(x, y)), sur, 1))
 34 rs = "1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ) ) - (-4*3)/ (16-3*2) )"
 35 sur = re.sub('\s+', '', funct(rs))
 36 tmp1 = re.findall("\([^()]+\)", sur)[1]
 37 a, b,d,*_,z = tmp1.split("*",)
 38 tmp = re.sub("[()]", '', tmp1)
 39 d1,d2=str(d).split("/")
 40 z1,z2 = str(re.sub('[)]',"",z)).split("/")
 41 sur= re.sub(str(d), str(divod(d1,d2)), sur, 1)
 42 sur= re.sub(str(re.sub('[)]',"",z)), str(divod(z1,z2)), sur, 1)
 43 sur = re.sub('\s+', '', sur)
 44 tmp1 = re.findall("\([^()]+\)", sur)[1]
 45 a, b,d,*_,z = tmp1.split("*",)
 46 tmp = re.sub("[()]", '', tmp1)
 47 tm1,tm2 =re.findall("(\d/\d)",tmp)
 48 x,y = tm1.split("/")
 49 x1,y1=tm2.split("/")
 50 sur= re.sub(str(tm2), str(divod(x1,y1)), re.sub(str(tm1), str(divod(x,y)), sur, 1), 1)
 51 sur = re.sub('\s+', '', sur)
 52 tmp1,tmp2,tmp3 = [re.findall("\(+[^()]+\)", sur)[1],re.findall("\(+[^()]+\)", sur)[2],re.findall("\(+[^()]+\)", sur)[3]]
 53 tmp2=re.sub('[()]',"",tmp2)
 54 ta,tb = re.split('\*',tmp2)
 55 ta1,ta2 = re.split('\-',tmp3)
 56 ta2=re.sub('[()]',"",ta2)
 57 taa,tab = re.split('\*',ta2)
 58 ta = re.sub('\-',"",ta)
 59 tmp1 =re.findall(r"\-(.*)\+(.*)\+(.*)",tmp1)
 60 t1,t2 = re.split("\*",str(tmp1[0][0]))
 61 t3,t4,t5=re.split("\*",str(tmp1[0][1]))
 62 t6,t7=re.split("\*",str(tmp1[0][2],))
 63 t7 = re.sub('\)',"",t7)
 64 sur = re.sub(str(taa+"\*"+tab),str(mult(int(taa),int(tab))),\
 65              re.sub(str(ta+"\*"+tb),str(mult(int(ta),int(tb))),\
 66              re.sub(str(t6+"\*"+t7),str(mult(float(t6),float(t7))),\
 67              re.sub(str(t3+"\*"+t4+"\*"+t5),str(mult(float(t3),float(t4),float(t5))),\
 68              re.sub(str(t1+"\*"+t2),str(mult(float(t1),float(t2))),sur,1),1),1),1),1)
 69 #1-2*((60-30+(-8)*(9-3.3333333333333335+173134.50000000003+405.71428571428567))-(-12)/(16-6))
 70 t1,t2 = re.split("\-",re.sub('[()]',"",re.findall("\(+[^()]+\)", sur)[3]))
 71 sur = re.sub(str(t1+"\-"+t2),str(subd(int(t1),int(t2))),sur,1)
 72 tmp1,tmp2,tmp3,tmp4 = re.findall("\(+[^()]+\)", sur)
 73 tmp3 ,tmp4= [re.sub('[()]',"",tmp3),re.sub('[()]',"",tmp4)]
 74 sur = re.sub("\("+tmp3+"\)/\("+tmp4+"\)",str(tmp3)+"/"+str(tmp4),\
 75              re.sub(str(tmp3+"\/"+tmp4),str(divod(float(tmp3),float(tmp4))),sur,1))
 76 tm1,*_,tm5,tm6,tm7,tm8,tm9= re.findall("[^*(\/)]+",sur)
 77 sur = re.sub(str(tmp3+"/"+tmp4),"-"+str(divod(float(filterfuter(tm8)),float(tm9))),sur)
 78 t1,t2,t3,t4 = re.split('[\+\-]',tm7)
 79 tk = str(subd(float(t1),float(t2)))
 80 sur = re.sub(str(tk+"\+"+t3+"\+"+t4),str(add(float(tk),float(t3),float(t4))),\
 81              re.sub(t1+"\-"+t2,str(subd(float(t1),float(t2))),sur))
 82 tm1,*_,tm3,tm4,tm5,tm6,tm7,tm8 = re.findall("[^\(\/\-)]+",sur)
 83 tm4 = re.sub('\+',"",tm4)
 84 sur  = re.sub(str(tm3+"\-"+tm4),str(subd(float(tm3),float(tm4))),sur,1)
 85 tmp = re.findall("[^\(\/\+\*)]+",sur)
 86 tmp[2]= re.sub("-","",tmp[2])
 87 sur = re.sub("\+([^\d])","",re.sub(tmp[2]+"\)\*\(" + tmp[3]+'\)'\
 88                                    ,str(mult(float(tmp[2]),float(tmp[3]))),sur,1))#1-2*((30.0+(-1388352.0)--1.2
 89 sur = filterfuter(sur) #1-2*((30.0-1388367.0476190478)+1.2) #2776670.695238094
 90 tmp = re.findall("\([^()]+\)", sur)[0]#1-2*((30.0-1388367.0476190478)+1.2)
 91 t1,t2 = re.sub("[()]","",tmp).split("-")
 92 sur=tmp = re.sub("[\(]","",re.sub("[\)]","",\
 93                                   re.sub(t1+"\-"+t2,str(subd(float(t1),float(t2))),sur),1),1)
 94                                     #1-2*(-1388337.0476190478+1.2)
 95 tmp = re.findall('\((.*)\+(.*)\)',sur)
 96 sur = re.sub(tmp[0][0]+"\+"+tmp[0][1],str(add(tmp[0][0],tmp[0][1])),sur)
 97 t1,t2,t3 = re.findall("[^\-\*\()]+",sur)
 98 t3 = re.sub('-','',t3)
 99 t1,t2 = filterfuter(re.sub(t2+"\*\(-"+t3+"\)","-"+str(mult(float(t3),float(t2))),sur)).split('+')
100 print("这个表达式 %s \n的计算结果:%s"%(rs,add(float(t1),float(t2))))
101 #2776672.6952380957
102 # print(eval(" 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ) ) - (-4*3)/ (16-3*2) ) "))

 

posted @ 2017-04-30 04:35  福临  阅读(271)  评论(0编辑  收藏  举报