import re
from functools import reduce
# 判断表达式是否正确
def check_formula(formula):
    tag = True
    if re.findall("[a-zA-Z]", formula):  # 包含字母
        tag = False
    if not len(re.findall("\(", formula)) == len(re.findall("\)", formula)):  # (与)不匹配
        tag = False
    return tag
# 去掉重复的运算符
def repeat_operator(formula):
    formula = formula.replace("++", "+")
    formula = formula.replace("-+", "-")
    formula = formula.replace("+-", "+")
    formula = formula.replace("--", "-")
    return formula
# 乘除
def count_mul_div(formula):
    is_have_muldiv = re.search("\d+\.?\d*[*/]\-?\d+\.?\d*", formula)  # 匹配含有*/运算的表达式
    if is_have_muldiv:
         bracketin_formula = is_have_muldiv.group()
         x, y = re.split("[*/]", bracketin_formula)  # 以*或/分割得到两个数据
         mul_or_div = re.search("[*/]", bracketin_formula).group()  # 获取运算符
         if mul_or_div == "*":
             operation_result = float(x) * float(y)
         else:
             operation_result = float(x) / float(y)
         operation_result = str(operation_result)
         formula = formula.replace(bracketin_formula, operation_result)  # 将乘除结果替换上面找到的乘除运算
         return count_mul_div(formula)  # 有*/,继续调用自己做乘除
    else:
         return count_add_sub(formula)  # 没有*/,调用加减计算
# 加减
def count_add_sub(formula):
    formula = repeat_operator(formula)
    is_have_muldiv = re.search("\-?\d+\.?\d*[+\-]\d+\.?\d*", formula)  # 匹配含有+-运算的表达式
    if is_have_muldiv:
        bracketin_formula = is_have_muldiv.group()
        nums_list = re.findall("\-?\d+\.?\d*", bracketin_formula)  # 匹配除+号外的数字
        operation_result = reduce(lambda x, y: float(x) + float(y), nums_list)  # reduce求和
        operation_result = str(operation_result)
        formula = formula.replace(bracketin_formula, operation_result)  # 将加减结果替换上面找到的加减运算
        return count_add_sub(formula)  # 继续调用自己做加减运算
    else:
        formula = formula.strip("()")  # 将运算结果外面()去掉
        return formula  # 没有+-,运算完成,返回运算结果
while True:
    #formula = re.sub(" +", "", input("请输入数学表达式或按q退出:"))
    formula = re.sub(" ", "", input("请输入数学表达式或按q退出:"))  # 输入表达式,去除空格
    #result = None
    if formula.lower() == "q":
        break
    else:
        if check_formula(formula):  # 判断表达式合法性
            is_bracket_flag = True
            while is_bracket_flag:
                formula = repeat_operator(formula)  # 去除重复运算符
                bracket_bestin = re.search("\([^()]*\)", formula)  # 找最内层括号
                if bracket_bestin:
                    bracket_bestin = bracket_bestin.group()
                    result = count_mul_div(bracket_bestin)  # 调用乘除计算
                    formula = formula.replace(bracket_bestin, result)  # 替换原表达式的内层括号
                else:
                    is_bracket_flag = False # 找不到括号
                    result = count_mul_div(formula) # 调用乘除计算
        else:
            print("INPUT ERROR")
    if result:
        print(result)