標籤:new arch print 函數 查看 split color 一個 +=
計算機的主要思維是:
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) # 把公式匹配到的乘除傳入這個Function Compute其值 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_expressionif __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學習之路 實現簡單的電腦功能。