用python实现简单计算器

整体思路是先实现不带括号的加减乘除运算,先乘除,再加减。
通过正则来匹配运算符来找到需要计算的表达式,调用定义的函数进行运算,再需要计算的表达式替换成计算的结果。感觉还是写得不够简洁。
对于有括号的情况,先匹配出括号中的表达式,注意需要使用非贪婪模式进行匹配,避免在多个括号的情况下出错。对匹配到的表达式,调用main()函数进行计算,最后替换掉带有括号的表达式。如此将整个表达式变成不含括号的表达式。

import re

def mul_div(equ):
    if '*' in equ:
        ret = equ.split('*')
        ret = [float(i) for i in ret]
        return ret[0] * ret[1]
    if '/' in equ:
        ret = equ.split('/')
        ret = [float(i) for i in ret]
        return ret[0] / ret[1]


def add_sub(equ):
    if '+' in equ:
        ret = equ.split('+')
        ret = [float(i) for i in ret]
        return ret[0] + ret[1]
    if '-' in equ:
        ret = equ.split('-')
        ret = [float(i) for i in ret]
        return ret[0] - ret[1]


def main(equ):
    # 四则运算的正则表达式
    mul_div_re = re.compile(r'[\d]+\.?[\d]*[*/][\d]+\.?[\d]*')
    add_sub_re = re.compile(r'[\d]+\.?[\d]*[+-][\d]+\.?[\d]*')

    while re.search(r'[(]', equ):  # 处理小括号
        brackets_equ = re.search(r'[(](.*?)[)]', equ).group(1)
        ret = main(brackets_equ)
        equ = re.sub(r'\(.*?\)', ret, equ, count=1)

    while re.search(r'[*/]', equ):  # 乘除法运算
        if mul_div_re.search(equ):
            mul_div_equ = mul_div_re.search(equ).group()
            ret = mul_div(mul_div_equ)
            equ = equ.replace(mul_div_equ, str(ret))

    while re.search(r'[+-]', equ):  # 加减法运算
        if add_sub_re.search(equ):
            add_sub_equ = add_sub_re.search(equ).group()
            ret = add_sub(add_sub_equ)
            equ = equ.replace(add_sub_equ, str(ret))
    return equ


if __name__ == '__main__':
    equation = input('请输入需要计算的表达式:')
    result = main(equation)
    print(result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值