Python简易计算器

# 开发一个简单的计算器程序
# 实现对加减乘除、括号优先级的解析,并实现正确运算
def cal(num1, num2, op):
    result = 0.0
    if op == '+':
        result = num1 + num2
    elif op == '-':
        result = num1 - num2
    elif op == '*':
        result = num1 * num2
    elif op == '/':
        result = num1 / num2
    return result


def cal_prior(operator):
    int_prior = 0
    if operator == '+' or operator == '-':
        int_prior = 1
    elif operator == '*' or operator == '/':
        int_prior = 2
    elif operator == '(':
        int_prior = 3
    elif operator == ')':
        int_prior = 4
    return int_prior


while True:
    str_input = '('+input("请输入需计算的表达式用‘()’包住[q退出]:").replace(" ","")+')'
    num_list = []      #操作数栈
    operator_list = [] #符号栈
    x = 0
    v = 0
    if str_input == '(q)':
        break;
    for a in str_input:
        if a.isdigit():
            x = x * 10 + int(a)  # 数字不是一位数时循环读数
            v = 1
        else:
            if v == 1:
                num_list.append(x)  # 数字进栈
                x = 0
                v = 0
            if a in ['+', '-', '*', '/', '(', ')']:
                if len(operator_list) == 0:   #符号栈为空时,待入栈字符直接进栈
                    operator_list.append(a)
                else:
                    if a == '(':  # '('直接进符号栈
                        operator_list.append(a)
                    elif a == ')':
                        while(operator_list[-1] != '('and len(operator_list)!=0):  # 计算结果,将结果压入数字栈
                            op = operator_list.pop()
                            num2 = num_list.pop()
                            num1 = num_list.pop()
                            result = cal(num1, num2, op)
                            num_list.append(result)
                        operator_list.pop()
                    # if len(operator_list) == 0:  # 符号栈为空时,待入栈字符直接进栈
                    #     operator_list.append(a)
                    else:
                        while len(operator_list) != 0 and cal_prior(operator_list[-1]) >= cal_prior(a) and operator_list[-1] != '(' :
                            op = operator_list.pop()
                            num2 = num_list.pop()
                            num1 = num_list.pop()
                            result = cal(num1, num2, op)
                            num_list.append(result)
                        operator_list.append(a)

    #输出运算结果
    if len(operator_list)==0:
        if len(num_list) == 1:
            print("运算结果:",num_list)
        else:
            print("运算出错!")

你可能感兴趣的:(Python,python,算法)