zoukankan      html  css  js  c++  java
  • 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则退出:
    ") == "q":
            exit()
  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/8733898.html
Copyright © 2011-2022 走看看