1、解题思路,将中缀表达式转为后缀表达式,最后是表达式求值
2、转后缀表达式 当前操作符优先级大于栈定优先级, 直接入栈,当前操作符优先级小于等于栈定优先级, 和栈里面所有操作依次比较,直到碰到栈里面的优先级小于它,它再入栈
3、表达式求值 当遇到操作符时,将栈顶的两个数字pop出来和对应的操作符进行计算,计算出来的值再压入栈顶。不断循环指导最后一个计算完成

def suffix_expression(infix_expression):
    operator_symbol_level = {
        '(': 1,
        '+': 2,
        '-': 2,
        '*': 3,
        '/': 3,
    }  # 定义操作符优先级
    result = []  # 用来存放后缀表达式的列表
    operator_symbol = []  # 存放操作符
    temp_number = ''  # 存放临时多位数字
    flag_number = ''  # 识别-这个操作符 是减号还是负号
    for item in range(len(infix_expression)):  # 循环 对每个字符进行判断
        if infix_expression[item].isdigit():
            temp_number = temp_number + infix_expression[item]  # 如果是数字先不放入result里面,例如789,不这样判断会将7/8/9分别放入
            if item == (len(infix_expression)-1):   # 最后一位数字直接放入result里面
                result.append(flag_number+temp_number)
                flag_number = ''
        if infix_expression[item] == ")":   # 往下找,找到(为止,把他们之间的操作都输出到result
            if temp_number:
                result.append(flag_number+temp_number)   # 确定碰到是操作符 再放入result里面 多个数字时生效
                temp_number = ''
                flag_number = ''
            for j in range(len(operator_symbol)):
                if operator_symbol[-1] == "(":
                    break
                result.append(operator_symbol.pop())
            operator_symbol.pop()  # 删除(
            continue
        if infix_expression[item] == "(":  # 直接放入操作符列表里面
            if temp_number:
                result.append(flag_number+temp_number)   # 确定碰到是操作符 再放入result里面 多个数字时生效
                temp_number = ''
                flag_number = ''
            operator_symbol.append(infix_expression[item])
            continue  # 管什么 直接放进去
        if infix_expression[item] in operator_symbol_level.keys():  # 如果是 +-*/ 就进行预算符之间的优先级比较
            if temp_number:
                result.append(flag_number+temp_number)   # 确定碰到是操作符 再放入result里面 多个数字时生效
                temp_number = ''
                flag_number = ''
            if infix_expression[item] == '-':
                if item == 0 or infix_expression[item-1] in operator_symbol_level.keys():
                    flag_number = '-'
                    continue
            if len(operator_symbol) == 0:  # 如果是空栈,直接加入
                operator_symbol.append(infix_expression[item])

            else:
                if operator_symbol_level[infix_expression[item]] > operator_symbol_level[operator_symbol[-1]]:  # 当前操作符优先级大于栈定优先级, 直接入栈
                    operator_symbol.append(infix_expression[item])
                else:   # 当前操作符优先级小于等于栈定优先级, 和栈里面所有操作依次比较,直到碰到栈里面的优先级小于它,它再入栈
                    for i in range(len(operator_symbol)):
                        if operator_symbol_level[infix_expression[item]] <= operator_symbol_level[operator_symbol[-1]]:
                            result.append(operator_symbol.pop())  # 把栈定的取出来放到结果里面
                        else:
                            break
                    operator_symbol.append(infix_expression[item])

    if operator_symbol:
        for i in range(len(operator_symbol)):
            result.append(operator_symbol.pop())
    return result


def infix_expression_evaluation(suffix_expression1):
    result1 = []
    string_level = '-+*/'
    for j in range(len(suffix_expression1)):  # 处理 '-1' 不能判断为数字问题
        if suffix_expression1[j] in string_level:
            continue
        else:
            suffix_expression1[j] = int(suffix_expression1[j])
    for i in suffix_expression1:
        if type(i) == int:
            result1.append(i)
        else:
            po1 = result1.pop()
            po2 = result1.pop()
            if i == "+":
                result1.append(po2 + po1)
            if i == "-":
                result1.append(po2 - po1)
            if i == "*":
                result1.append(po2 * po1)
            if i == "/":
                result1.append(po2 // po1)

    print(result1[0])


if __name__ == '__main__':
    num = input()
    num = num.replace('[', '(')
    num = num.replace(']', ')')
    num = num.replace('{', '(')
    num = num.replace('}', ')')
    b = suffix_expression(num)
    infix_expression_evaluation(b)