函數加正則實現簡單計算器

本實現主要用到正則匹配的知識和函數的知識點完成一個能實現簡單的加減乘除的計算器的運算python

import re

#乘除運算
def numl_mod(args):
    resurt  = re.compile('(\d+\.?\d*)([*/])(\-?\d+\.?\d*)')#正則匹配,將匹配出來的結果賦給resurt
    while resurt.search(args):#while循環判斷直到算出最終結果
        new_num = resurt.search(args)
        num = new_num.group()#取出原值賦給num
        num1 = float(new_num.group(1))
        num2 = new_num.group(2)#取出來的是 * / 號,在if 處進行判斷
        num3 = float(new_num.group(3))

        if num2 == '*':
            result = num1 * num3#返回 * 的結果
        elif num2 == '/':
            result = num1 / num3#返回 / 的結果
        args = args.replace(num, str(result), 1)#將計算的結果替換返回
    return args
# print(numl_mod("10*2/5"))

# #加減運算
def poor_add(args):
    resurt = re.compile('(\-?\d+\.?\d*)([-+])(\-?\d+\.?\d*)')
    while resurt.search(args):
        new_num = resurt.search(args)
        num = new_num.group()
        num1 = float(new_num.group(1))
        num2 = new_num.group(2)
        num3 = float(new_num.group(3))
        if num2 == '-':
            result = num1 - num3
        elif num2 == '+':
            result = num1 + num3
        args = args.replace(num, str(result), 1)
    return args

# print(poor_add("3-5+6"))

#檢查判斷去括號

# origin = "1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*25))"
# origin = input("Enter number >>>>>")
#檢測式子的合法性
def check(args):
    flag = True#默認標識位爲真
    if re.findall("[a-zA-Z]",args):#檢查式子的合法性,不能含有大小寫字母
        print("error")
        flag = False
    return flag

#檢測運算
def format(args):#檢測式子,將 含有空格/++/+-/--等進行替換,返回一個新的式子
    new_args1 = args.replace("++", "+")
    new_args2 = new_args1.replace("+-", "-")
    new_args3 = new_args2.replace("--", "+")
    new_args4 = new_args3.replace("-+", "-")
    new_args5 = new_args4.replace(" ", "")
    new_args6 = new_args5.replace("*+","*")
    new_args = new_args6.replace("/+","/")
    return new_args

print("--------------")
print("歡迎使用計算機")
print("--------------")
#主代碼塊
#執行語句塊
while True:
    choice = input("請選擇 q/Q【退出】 y/Y 【執行】")
    if choice == "q" or choice == "Q":
        print("謝謝您的使用")
        break
    origin = input("Enter number >>>>>")
    if check(origin):
        new_origin = format(origin)
        while re.search("\(",new_origin):#匹配若是有括號,執行下面代碼
            new_new_origin = re.search("\([^()]+\)",new_origin).group()#匹配出最裏面的括號裏的式子
            # print(new_new_origin)
            s = numl_mod(new_new_origin)
            # print(s)
            s1 = poor_add(s)
            s2 = s1[1:-1]
            new_origin = new_origin.replace(new_new_origin, s2, 1)
            # print(new_origin)
            # print(s2, type(s2))
            # break
        else:#括號執行完後執行的代碼塊
            resurt = numl_mod(new_origin)
            # print(resurt, "resurt")
            # print(resurt)
            new_resurt = poor_add(resurt)
            # a2 = a2[1:-1]
            print(new_resurt)#返回的最終結果,也就是咱們要獲得的最終計算結果
相關文章
相關標籤/搜索