python简易计算器

 

import re
"""
过程:(最内部的括号->先乘除,替换->整理表达式->加减)->替换
"""


def multiply_divide(exp):
    # 计算乘除
    if '/' in exp:
        a, b = exp.split('/')
        return str(float(a)/float(b))
    if '*' in exp:
        a, b = exp.split('*')
        return str(float(a)*float(b))


def deal_with(expr):
    # 整理表达式
    expr = expr.replace('++', '+')
    expr = expr.replace('+-', '-')
    expr = expr.replace('--', '+')
    expr = expr.replace('-+', '-')
    return expr


def add(expr):
    # 计算加减,减法的实质式加法
    ret = re.findall('-?\d+\.?\d?', expr)
    sum = 0
    for i in ret:
        sum += float(i)
    return str(sum)


def expr_no_bracket(expr):
    # 计算括号内的值
    expr = expr.strip('()')
    # print(expr)
    # 计算
    while 1:
        ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', expr)
        if ret:
            expr_son = ret.group()
            # print(expr_son)
            new_expr = multiply_divide(expr_son)        
            expr = expr.replace(expr_son, new_expr)     # 替换
            expr = deal_with(expr)  # 整理
        else:   # 没有括号
            expr = add(expr)
            return expr


def calculate_main(expr):
    # 取空格
    expression = expr.replace(' ', '')  
    # print(expression)
    while 1:
        ret = re.search('\([^()]+\)', expression)
        if ret:
            expr_brackets = ret.group()
            # print(expr_brackets)
            new_exp = expr_no_bracket(expr_brackets)
            expression = expression.replace(expr_brackets, new_exp)     # 求王括号内部,替换
            # print(new_exp)
            # print(expression)
        else:       # 没有括号
            ret = expr_no_bracket(expression)
            return ret


while 1:
    print('请输入表达式,按q退出!>')
    expression = input('>>')
    if expression == 'q':
        break
    ret = calculate_main(expression)
    print(ret)

 

转载于:https://www.cnblogs.com/wt7018/p/10999194.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值