python调用计算器_使用python实现计算器功能

1 importre2 defformatEquation(string):3 string = string.replace("--", "+")4 string = string.replace("-+", "-")5 string = string.replace("++", "+")6 string = string.replace("+-", "-")7 string = string.replace("*+", "*")8 string = string.replace("/+", "/")9 string = string.replace(' ', '')10 returnstring11 deffindErrorChar(equation):12 '''

13 查找非计算的字符14 '''

15 re_rule = r"[^ \.\d\+\-\*\/\(\)]+"

16 req =re.findall(re_rule,equation)17 returnreq18 deffindErrorOperator(equation):19 '''

20 查找连续多次出现的运算符号21 '''

22 re_rule = r'[+\-/*][+\-/*][+\-/*]*'

23 req =re.findall(re_rule,equation)24 while '**' inreq:25 req.remove('**')26 returnreq27 defaddSubtract(equation):28 '''

29 加减法运算,递归运算30 '''

31 re_rule = r'[-]?\d+\.?\d*[+-]\d+\.?\d*'

32 ifre.search(re_rule,equation):33 req =re.search(re_rule,equation).group()34 if '+' inreq:35 x,y = req.split('+')36 string = str(float(x) +float(y))37 equation =formatEquation(equation.replace(req,string))38 returnaddSubtract(equation)39 if '-' inreq:40 if req.startswith('-'):41 req1 = req[1:]42 x,y = req1.split('-')43 x = '-'+x44 else:45 x,y = req.split('-')46 string = str(float(x) -float(y))47 equation =formatEquation(equation.replace(req,string))48 returnaddSubtract(equation)49 else:50 returnequation51

52 defmultiplicationDivision(equation):53 '''

54 乘除法及幂运算,递归运算55 '''

56 re_rule = r'\d+\.?\d*([*/]|\*\*)[\-]?\d+\.?\d*'

57 print(11)58 ifre.search(re_rule,equation):59 req =re.search(re_rule,equation).group()60 print(req)61 if '**' inreq:62 x,y = req.split('**')63 string = str(float(x) **float(y))64 equation =formatEquation(equation.replace(req,string))65 returnmultiplicationDivision(equation)66 if '*' inreq:67 x,y = req.split('*')68 string = str(float(x) *float(y))69 equation =formatEquation(equation.replace(req,string))70 returnmultiplicationDivision(equation)71 if '/' inreq:72 x,y = req.split('/')73 string = str(float(x) /float(y))74 equation =formatEquation(equation.replace(req,string))75 returnmultiplicationDivision(equation)76 else:77 returnequation78 defremoveBrackets(equation):79 '''

80 计算算式中括号里的公式,直到所有括号的计算已完成81 '''

82 re_rule = r'\([^()]*\)'

83 equation =formatEquation(equation)84 ifre.search(re_rule,equation):85 req =re.search(re_rule,equation).group()86 string = addSubtract(multiplicationDivision(req[1:-1]))87 equation =equation.replace(req,string)88 returnremoveBrackets(equation)89 else:90 returnequation91 if __name__ == '__main__':92 while 1:93 #equation = input("请输入需要计算的公式")

94 equation = "1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"

95 equation = equation.replace(' ','')96 #判断字符是否合法

97 iffindErrorChar(equation) :98 errorChar =findErrorChar(equation)99 print("下列字符不合法:",''.join(errorChar))100 eliffindErrorOperator(equation):101 errorOperator =findErrorOperator(equation)102 print("下列字符不合法:",''.join(errorOperator))103 else:104 #格式化算式

105 formatEquation(equation)106 print("输入的公式为:",equation)107 #去除括号

108 equation =removeBrackets(equation)109 #计算结果

110 equation =addSubtract(multiplicationDivision(equation))111 print('程序计算结果为:',equation)112 print('eval计算结果为:',eval(equation))113 break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值