python3簡單實現支持括號的加減乘除運算


1.首先表達式的空格。
2.循環計算最內層帶括號的表達式(提取運算符出現的順序,然后計算)
3.計算最外層的表達式輸出。
剛接觸python,代碼不夠嚴謹,僅實現功能。不知道如何在函數中使用運算符變量做運算(使用的時候是字符串形式),希望知道的朋友告訴我,互相學習一下。
import re,math
def qcysf(s):
    while re.findall('\+\-|\+\+|\-\-|\-\+',s):
        s = s.replace('+-','-')
        s = s.replace('++','+')
        s = s.replace('--','+')
        s = s.replace('-+','-')
    return s
def yunsuan(a1):
    temp1 = re.sub('\d|\.|\+|-| ','',a1)
    # print(temp1)
    # print(a1)
    for i in temp1:
        if i == "*":
            b = re.search('(-?\d+\.?\d*\*-?\d+\.?\d*)', a1).group()
            # print(b)
            temp2 = round(float(b.split('*')[0]) * float(b.split('*')[1]),10)
            temp2 = '+' + str(temp2)
            a1 = a1.replace(b, temp2,1)
            # print(a1)
        else:
            b = re.search('(-?\d+\.?\d*/-?\d+\.?\d*)', a1).group()
            # print(b)
            temp2 = round(float(b.split('/')[0]) / float(b.split('/')[1]),10)
            temp2 = '+' + str(temp2)
            a1 = a1.replace(b, temp2,1)
            # print(a1)
    a1 = qcysf(a1)
    # print(a1)
    a2 = a1.lstrip('-')
    temp3 = re.sub('\d|\.| ', '', a2)
    for i in temp3:
        if i == "+":
                b = re.search('(-?\d+\.?\d*\+\d+\.?\d*)', a1).group()
                temp2 = round(float(b.split('+')[0]) + float(b.split('+')[1]),10)
                a1 = a1.replace(b, str(temp2),1)
                # print(a1)
        else:
            b = re.search('(\d+\.?\d*\-\d+\.?\d*)', a1).group()
            temp2 = round(float(b.split('-')[0]) - float(b.split('-')[1]),10)
            a1 = a1.replace(b, str(temp2),1)
            # print(a1)
    return a1

if __name__ == "__main__":
    a = input('請輸入你要計算的內容:')
    a = a.replace(' ','')
    # print(a)
    if re.findall('[a-zA-Z]]',a):
        print('你輸入的內容不合法')
    else:
        while re.search("\([^()]+\)", a):
            b = re.search("\([^()]+\)", a).group()
            # b = qcysf(b)
            # print(a)
            # print(b)
            b1 = re.sub('\(|\)','',b)
            # print(a)
            temp = yunsuan(b1)
            a = a.replace(b, str(temp))
        # print('這是倒數第二個',a)
        a = qcysf(a)
        a = yunsuan(a)
        print(a)
View Code

請輸入你要計算的內容:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
2776672.6951997215


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM