1. 程式人生 > >Python帶括號的計算器

Python帶括號的計算器

imp 越界 去除 end NPU 算術 踏實 位置 enume

帶括號的計算器也是第一個自我感覺完成最好的 畢竟真的弄了一個多星期 雖然前期這路真的很難走 我會努力加油 將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()

Python帶括號的計算器