[Python Study Notes]計算器
阿新 • • 發佈:2018-03-19
while 輸入 bin ret 繼續 控制 art 錯誤 一個
# ------------------------------------------------------------------------------------- # @文件: 計算器.py # @工程: blog # @時間: 2018/3/17 20:14 # @作者: liu yang # @博客: www.liuyang1.club # @郵箱: [email protected] # ------------------------------------------------------------------------------------ # 編碼格式 # -*- coding: utf-8 -*- # Python版本 # #!/usr/bin/python3 import re exprs = ‘‘ # 表達式 sum = 0 # 結果 flag = ‘new‘ # 計算標誌位 def License(): print(" **********控制臺計算器***********\n ·支持+-×/運算,指數運算(^),\n ·支持包含括號的長表達式輸入\n ·歡迎訪問博客:www.liuyang1.club \n ********CopyRight(c) 2018 ********\n ") def BracketUnbalanceCheck(str_in): num = 0 for i in str_in: if i == ‘(‘: num += 1 elif i == ‘)‘: num -= 1 if num != 0: # 括號不平衡 print("錯誤:輸入的括號不平衡,請重新輸入\n") return 1 else: # 括號平衡 return -1 def CharErrorCheck(str_in): if re.findall(r‘[&a-zA-Z<>,?~!@#$%";:]‘, str_in): # 正則表達式校驗輸入字符串的合法性 print(‘錯誤:表達式包含非法字符,請重新輸入\n‘) return 1 else: return -1 def InputExpression(): global exprs while not (CharErrorCheck(exprs) == -1 and BracketUnbalanceCheck(exprs) == -1): # 直到得到一個合法的表達式 exprs = input("繼續輸入表達式:\n") m = re.match(r‘^[\^/\*+\-\\]\w*‘, exprs) # 匹配輸入字符串的第一個字符是否是運算符,判斷繼續運算還是開始新計算 if m: return ‘continue‘ else: return ‘new‘ def Compute(flag): global exprs global sum exprs = exprs.replace(‘^‘, ‘**‘) # 將^替換為** if flag == ‘continue‘: exprs = str(sum) + exprs try: sum = eval(exprs) print("計算式:", exprs) print(exprs, "= " + str(sum)) except SyntaxError: print("錯誤:繼續計算時出現語法錯誤,程序返回\n") except ZeroDivisionError: print("錯誤:除數不能為0,程序返回\n") def main(): global exprs, flag License() while True: exprs = input("輸入表達式:") flag = InputExpression() Compute(flag) if __name__ == ‘__main__‘: main()
[Python Study Notes]計算器