带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走 我会努力加油 将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()