本文实例为大家分享了Python实现计算器功能示例代码,供大家参考,具体内容如下
1.简单计算器
#计算一个表达式的时候,首先肯定是先算括号里面的,再算乘除法,后算加减法import re# 1.去括号def remove_kuohao(expression): ''' 这是一个去除括号的函数 :param expression: 传进来的表达式 :return: 计算后的结果 ''' while True: ret = re.search(r'/([^(]*?/)',expression) #先利用正则匹配到式子里面的括号 if ret: #如果有括号 re_expression = ret.group() #先把找到的括号group()一下得到 # print(re_expression) res = jianhua(re_expression.strip('()')) #括号里面有*/-+都不一定,就又定义了一个简化这个表达式的函数 # 如果是乘法就执行乘法运算,如果是除法运算就执行除法等,这样的话就直接调用jianhua这个函数了,当然这个式子 # 有括号,顺便把括号也去了,直接计算去掉括号后的式子 expression = expression.replace(re_expression,str(res)) #把计算出来的结果放回去:就是把原来的括号里的表达式 # 替换成现在计算的结果 # print(expression) continue break res = jianhua(expression) return res#简化算法def jianhua(re_expression): while True: # 匹配乘除法 ret = re.search(r'/d+/.*?/d*[*/]/-?/d+/.?/d*', re_expression) #利用正则匹配乘除法 if ret: # 如果匹配到有*或/就执行下面的代码 chengchu_expression = ret.group() #就先group一下得到有乘除法的表达式 res = chengchu(chengchu_expression) #调用乘除法的函数计算 re_expression = re_expression.replace(chengchu_expression, str(res)) #吧有乘除法的表达式和计算出来的结果替换 re_expression =chulifuhao(re_expression) #在调用处理符号的函数 # print(re_expression) continue break # 匹配加减法 num = re.findall(r'[+-]?/d+/.?/d*', re_expression)#在没有乘除法的时候,就让匹配加减法, if len(num) > 1: #如果匹配到的表达式的长度大于1,不过是加法还是减法,都让计算加法。因为float啥结果就是啥 mynum = 0 for i in num: mynum += float(i) return mynum else: return num[0]# 3.计算两个数的+-*/def chengchu(expression): if '*' in expression: x,y = expression.split('*') return float(x)*float(y) #返回乘法运算的结果 ,让res接收 if '/' in expression: x, y = expression.split('/') return float(x)/float(y) #返回乘法运算的结果 ,让res接收def chulifuhao(expression): if '--' in expression: expression = expression.replace('--','+') if '++' in expression: expression = expression.replace('++','+') if '+-' in expression: expression = expression.replace('+-','-') if '-+' in expression: expression = expression.replace('-+','-') return expression #返回结果cmd = input('请输入你要计算的表达式:>>')# s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'new_s = cmd.replace(' ', '') #先将所有的空格去了# print(new_s)ret = remove_kuohao(new_s) #调用去除括号的函数,进行下一步操作print(ret)
新闻热点
疑难解答