1. 程式人生 > >[Python Study Notes]計算器

[Python Study Notes]計算器

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]計算器