python學習之路 實現簡單的計算機功能。
阿新 • • 發佈:2018-07-01
內部 表達式 remove 符號 加減 per multipl 計算機 print
計算器的主要思維是:
1、對輸入的表達式去除其空格
2、判斷用戶輸入的表達式中的括號是否合法
3、每次找到這個表達式只有一對括號的表達式(就是這找到的表達式內部沒有括號)
4、對找到的只有一對括號中的表達式進行先乘除再加減的運算,把計算的結果替換到找到的表達式中
5、直到表達式中沒有括號為止。
6、我們在調用上面的有一個先計算乘除在計算加減的函數。最後得到結果。
具體的代碼如下:
#!/usr/bin/env python # -*-coding:utf-8-*- import re # 查看表達式的括號是否合法 def check_bracket(expression): tmp = []for i in expression: if i == ‘(‘: tmp.append(i) elif i == ‘)‘: if len(tmp)>0: tmp.pop() else: return False if len(tmp)>0: return False else: return True # 去掉表達式中多余相連的符號 def clear_operator(expression): expression= expression.replace(‘--‘, ‘+‘) expression = expression.replace(‘+-‘, ‘-‘) return expression # 計算乘除 def multiply_divide(exp_son): if ‘*‘ in exp_son: left, right = exp_son.split(‘*‘) return str(float(left)*float(right)) else: left, right = exp_son.split(‘/‘)return str(float(left) / float(right)) # 4、沒有括號的表達式先計算乘除在把只有加減的公式分割成一個列表相加列表中的一個個元素 def cal_no_bracket(expression): # 先去除只有一對括號的表達式的括號 # 9-2*-5/3 + 7 /3*99/4*2998 +10 * 568/14 # 先乘除在加減 while True: ret = re.search(‘\d+\.?\d*[*/]-?\d+\.?\d*‘, expression) if ret: exp_son = ret.group() ret = multiply_divide(exp_son) # 把公式匹配到的乘除傳入這個函數計算其值 expression = expression.replace(exp_son, ret) expression = clear_operator(expression) else: # 這裏面只有加減我們把這裏面所有的值用正則把除了+所有的數找出來[-3,34,3.2345]相當於以+做分隔符 # 我們只要把裏面所有的元素相加就行了 ret = re.finditer(‘-?\d+\.?\d*‘,expression) sum = 0 for i in ret: sum += float(i.group()) return str(sum) # 3、先去掉所有的括號在計算其結果 def remove_bracket(expression): while True: # 先去掉所有的括號 express_a_bracket = re.search(‘\([^()]+\)‘,expression) if express_a_bracket: # 處理這個只有一對括號的表達式 express_a_bracket = express_a_bracket.group() ret = cal_no_bracket(express_a_bracket.strip(‘()‘)) # 把括號裏的表達式進行運算 expression = expression.replace(express_a_bracket, ret) expression = clear_operator(expression) else: new_expression = cal_no_bracket(expression) return new_expression if __name__ == ‘__main__‘: # 1、去除用戶輸入的表達式去除空格 # 2、這裏我們用棧的方式確認用戶輸入的括號對是否合法 expression_input = input(‘>>>:‘).replace(‘ ‘, ‘‘) if check_bracket(expression_input): # 如果表達式的括號合法那就執行下面的 ret = remove_bracket(expression_input) print(eval(expression_input)) print(ret) else: print(‘表達式括號不合法‘)
python學習之路 實現簡單的計算機功能。