Python帶括號的計算器


帶括號的計算器也是第一個自我感覺完成最好的 畢竟真的弄了一個多星期 雖然前期這路真的很難走  我會努力加油  將Python學好學踏實

參考了兩位博主的文章

http://www.cnblogs.com/0zcl/p/5983236.html 

http://www.cnblogs.com/loyfee/p/5764926.html#3538071

大致過程就是 先將輸入的數據轉為列表 當中去除空字符  

接着找出最里層括號 進行運算 再將結果放回列表 最后算出結果

import re
#data = input("請輸入算術:")

def change_list(data):
    data =re.sub(" ","",data)#將空格轉為""
    # print(data)
    data_list = []
    for i in data:
        data_list.append(i)
    num = 0
    try:
        while 1:
            if data_list[0] == "-":
                data_list[0] = data_list[0] + data_list[1]
                data_list.pop(1)
            if data_list[num].isnumeric():
                if data_list[num+1].isnumeric():
                    data_list[num] = data_list[num]+data_list[num+1]
                    data_list.pop(num+1)
                else:
                    num += 1
            else:
                num += 1
    except IndexError as e:
        #print(e,"索引越界")
        return data_list
        # if data_list.index(data_list[-1]) <num:
        #     print(data_list)
        #     break


def compute(data):
    while 1:
        #判斷乘除
        if "*" in data or "/" in data:
            for i,j in enumerate(data):
                if j == "*":
                    data[i+1] =int(data[i-1]) * int(data[i+1])
                    data.pop(i-1)
                    data.pop(i-1)
                    break
                if j == "/":
                    data[i+1] =int(data[i-1]) * int(data[i+1])
                    data.pop(i-1)
                    data.pop(i-1)
                    break
        #判斷加減
        if "+" in data or "-" in data:
            for i,j in enumerate(data):
                if j == "+":
                    data[i + 1] = int(data[i - 1]) + int(data[i + 1])
                    data.pop(i - 1)
                    data.pop(i - 1)
                    break
                if j == "-":
                    data[i + 1] = int(data[i - 1]) - int(data[i + 1])
                    data.pop(i - 1)
                    data.pop(i - 1)
                    break
        else:
            return data
            break


#有括號和無括號運算
"""
如果有括號 則會以最里層的“)”去找到與其第一個“(” 用:截取中間的數字進行運算,接着傳回列表
直到沒有括號時跳出 進行運算
"""
def parenth(data):
    if "(" in data:
        while 1:
            if ")" in data:
                b = data.index(")")#表示第一個“)”的索引位置
                #print(b)
                for i in range(b,-1,-1):  #截取最里層括號進行運算
                    #print(i)

                    if data[i] == "(":
                        new_list = []
                        new_list=data[i+1:b]
                        byte=compute(new_list)[0]
                        del(data[i:b+1])
                        data.insert(i,byte)
                        break
            else:
                return compute(data)

    else:
        compute(data)
while 1:
    data = input("請輸入計算:")
    if data == "":continue
    data = change_list(data)
    parenth(data)
    print(data[0])
    if input("如果輸入q則退出:\n") == "q":
        exit()

 


免責聲明!

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



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