本文實例為大家分享了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)
新聞熱點
疑難解答