• python实现简单的计算器功能


    如想实现一个计算器的功能,输入格式为字符串,不能运用python里面的内置方法,出去简单的加减乘除,设计一个相对高级的计算器:

    a = '1 - 2 * ( ( 6 0 -3 0  +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
    # 去掉所有的空格
    # 加减乘除 括号
    # 先算括号里的乘除,再算括号里的加减
    主要利用正则表达式来实现,具体代码如下:
    import re
    a = '1 - 2 * ( ( 6 0 -3 0  +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
    res_brackets = re.compile(r'([^()]*)') # 寻找带括号的(最内层的括号)
    express = a.replace(' ','')
    def dealwith(exp):
        '''
        deal with the formula
        :param exp: del_brackets data
        :return:
        '''
        exp = exp.replace('+-', '-')
        exp = exp.replace('--', '+')
        return exp
    def add(exp):
        data = re.findall('-?d+.?d*',exp)
        sum_data = 0
        for i in data:
            sum_data += float(i)
        return str(sum_data)
    def multi_divi(exp):
        '''
        calculate multiplication&division
        :param exp: res_multi_divi.search(del_brackets_data)
        :return:
        '''
        res_multi_divi = re.compile(r'-?d+.?d*[*/]-?d+.?d*')
        while res_multi_divi.search(exp):
            data = res_multi_divi.search(exp).group()
            if '*' in data:
                element = data.split('*')
                exp = exp.replace(data,str(float(element[0])*float(element[1])))
            if '/' in data:
                element = res_multi_divi.search(exp).group().split('/')
                exp = exp.replace(data, str(float(element[0]) / float(element[1])))
        else:
            return dealwith(exp)
    def del_brackets(exp):
        while res_brackets.search(exp):
            brackets_data = res_brackets.search(exp).group()
            del_brackets_data = add(multi_divi(re.sub('(|)', '', brackets_data)))
            exp = dealwith(exp.replace(brackets_data,del_brackets_data))
        else:
            return add(multi_divi(exp))
    print(del_brackets(express))
    

      当然,可以用更简单的代码来实现,但是思路基本一样。

  • 相关阅读:
    Vue生命周期
    脚本生命周期
    音频
    光照系统
    InstantOC(对象渲染---游戏优化)
    kafka单机环境配置以及基本操作
    mysql 锁机制
    java.math.BigDecimal类multiply的使用
    去掉返回的json中特殊字符
    TheadLocal与synchronized
  • 原文地址:https://www.cnblogs.com/zz1314/p/10426442.html
Copyright © 2020-2023  润新知