#输入有其它括号,换成()
equation = list(map(str,input().replace('[','(').replace(']',')').replace('{','(').replace('}',')')))
new_equation = []
for i in range(len(equation)):
    if i == 0:
        new_equation.append(equation[i])
    else:
        if equation[i].isdigit():
            if new_equation[-1].isdigit():
                new_equation[-1] += equation[i]
            else:
                new_equation.append(equation[i])
        else:
            new_equation.append(equation[i])
equation = new_equation

#统计多少个括号
brackets = 0
for i in equation:
    if i == "(":
        brackets += 1

#寻找最内层的括号/是里面没有别的括号的括号
def find_inner_bracket(equation):
    bracket_index = []
    for i in range(len(equation)):
        if equation[i] == "(":
            for j in range(i+1, len(equation)):
                if equation[j] == "(":
                    break
                elif equation[j] == ")":
                    if len(bracket_index) == 0:
                        bracket_index.append(i)
                        bracket_index.append(j)
                    break
    return bracket_index

#嵌套的无括号表达式计算
def calculate_without_bracket(sub_s):
    nums = []
    for j in range(len(sub_s)):
        #先读入第一个
        if j == 0:
            if sub_s[j].isdigit():
                nums.append(int(sub_s[j]))
            else:
                continue
        else:
            if sub_s[j-1] == "+":
                nums.append(int(sub_s[j]))
            elif sub_s[j-1] == "-":
                nums.append(-int(sub_s[j]))
            elif sub_s[j-1] == "*":
                nums[-1] = nums[-1] * int(sub_s[j])
            elif sub_s[j-1] == "/":
                nums[-1] = nums[-1] // int(sub_s[j])
    return str(sum(nums))

#对最内层()内的表达式进行计算
def calculate_with_bracket(bracket_range, equation):
    s_braket = bracket_range
    # for i in range(len(equation)):
    #     if equation[i] == x:
    #         s_braket.append(i)
    #     elif equation[i] == y:
    #         s_braket.append(i)
    if len(s_braket) != 0:
        for i in range(0, len(s_braket), 2):
            #进行括号内计算
            sub_s = equation[s_braket[i]+1: s_braket[i+1]]
            # print(sub_s)
            sub_res = calculate_without_bracket(sub_s)
            #得到结果后删除括号及括号内表达式并插入结果
            del equation[s_braket[i]:s_braket[i+1]+1]
            equation.insert(s_braket[i], sub_res)
    return equation

#计算:共循环括号个数次
for i in range(brackets):
    # print(equation)
    bracket_range = find_inner_bracket(equation)
    # print(bracket_range)
    equation = calculate_with_bracket(bracket_range, equation)

if len(equation) == 1:
    res = equation[0]
    print(res)
else:
    # print(equation)
    res = calculate_without_bracket(equation)
    print(res)



#eval()
# # s = input() 
# # s = s.replace("{", "(") 
# # s = s.replace("}", ")") 
# # s = s.replace("[", "(") 
# # s = s.replace("]", ")") 
# # print(int(eval(s)))

本质上也是递归思想,(新人代码写的比较丑见谅):

A.预处理:

首先把{}和[]都转换成()预处理;

把连续的数字也就是多位数字(大于等于两位的数字)合并成list当中的一项构建新的字符list;

统计括号的个数,通过数有多少个"(",确定循环(递归)次数。

B.正式处理:

在当前递归循环中,寻找list中最内层的括号(即括号内没有其它括号的括号)的起止index,在最左端的优先,每次只处理一个最内层括号内的表达式

计算完成后,删除list中包括该最内层括号以及其起止范围内的表达式对应的字符,将计算结果插入该括号的起点位置,得到要在下一轮中进行计算的新的list

C.结果判定:

if:范例输入的整个表达都是在括号内,则以上计算结果输出的list只有一个字符元素,即结果,转格式输出

else:再进行一次无括号计算,输出结果

整个逻辑感觉可以归纳为更加精简的递归格式,欢迎批评!