1 #Author wangmengzhu 2 import re 3 def cheng_and_chu(arg): 4 val = arg[0] 5 mch = re.search('d+.*d*[*/]+[+-]?d+.*d*', val) 6 if not mch: 7 return 8 content = re.search('d+.*d*[*/]+[+-]?d+.*d*', val).group() 9 if len(content.split('*'))>1: 10 n1,n2 = content.split('*') 11 value = float(n1) * float(n2) 12 else: 13 n1,n2 = content.split('/') 14 value = float(n1) / float(n2) 15 qianzhui,houzhui = re.split('d+.*d*[*/]+[+-]?d+.*d*', val, 1) 16 new_str = "%s%s%s"%(qianzhui,value,houzhui) 17 arg[0] = new_str 18 cheng_and_chu(arg) 19 20 def jia_and_jian(arg): 21 while True: 22 if arg[0].__contains__('+-') or arg[0].__contains__("++") or arg[0].__contains__('-+') or arg[0].__contains__("--"): 23 arg[0] = arg[0].replace('+-','-') 24 arg[0] = arg[0].replace('++','+') 25 arg[0] = arg[0].replace('-+','-') 26 arg[0] = arg[0].replace('--','+') 27 else: 28 break 29 if arg[0].startswith('-'): 30 arg[1] += 1 31 arg[0] = arg[0].replace('-','&') 32 arg[0] = arg[0].replace('+','-') 33 arg[0] = arg[0].replace('&','+') 34 arg[0] = arg[0][1:] 35 val = arg[0] 36 mch = re.search('d+.*d*[+-]{1}d+.*d*', val) 37 if not mch: 38 return 39 content = re.search('d+.*d*[+-]{1}d+.*d*', val).group() 40 if len(content.split('+'))>1: 41 n1, n2 = content.split('+') 42 value = float(n1) + float(n2) 43 else: 44 n1, n2 = content.split('-') 45 value = float(n1) - float(n2) 46 before, after = re.split('d+.*d*[+-]{1}d+.*d*', val, 1) 47 new_str = "%s%s%s" % (before,value,after) 48 arg[0] = new_str 49 jia_and_jian(arg) 50 51 def cal(sr): 52 new_sr = [sr.strip('()'),0] 53 cheng_and_chu(new_sr) 54 jia_and_jian(new_sr) 55 res = float(new_sr[0]) 56 return res 57 58 def basket(sr): 59 flag = True 60 while flag: 61 m = re.search("([^()]+)",sr) 62 if m: 63 sub_sr = m.group() 64 sub_res = cal(sub_sr) 65 sr = sr.replace(m.group(),str(sub_res)) 66 else: 67 print('结果:',cal(sr)) 68 flag = False 69 70 if __name__ == "__main__": 71 print("----------欢迎使用计算器----------") 72 while True: 73 flag = True 74 sr = input("输入要计算的函数(q:退出):") 75 sr = re.sub("s*","",sr) 76 error = re.search('[0-9*/-+]',sr) 77 while flag: 78 if not error: 79 print("输入有误") 80 sr = input("请重新输入要计算的函数(q:退出):") 81 else: 82 if error.group() == 'q': 83 exit("感谢使用,再见") 84 basket(sr) 85 flag = False