• Python 计算器


    Python 计算器实现:

    实现加减乘除及拓号优先级解析
    用户输入
    1 - 2 * ((60 - 30 + (-40 / 5) * (9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998 + 10 * 568 / 14)) - (-4 * 3) / (16 - 3 * 2))
    等类似公式后,必须自己解析里面的(), +, -, *, / 符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

    需求:
    1.编写一个计算器。
    2.可以自动计算括号。
    4.不使用eavl函数。

    实现:
    1.先取出第一个最里面括号的值进行计算。
    2.把第一个值返回计算的表达式,进行先一个括号的计算。

    core:
    1.定义个main主函数,并取出最里括号的传给count函数。
    2.count函数负责判断是加减,还是乘除运算并传给对应的mul,add_main,div函数进行计算,
    3.计算完成后返回主函数,进行下一个括号的预算。
    import re
    
    def add_min(a):
        '''
        计算加减法
        :param:
        :return:
        '''
    
        if '--' in a:
            a = a.replace('--', '+')
    
        c = re.findall(r'-?d+.?d*', a)
        ls = []
        for i in c:
            ls.append(float(i))
        rest = sum(ls)
        return rest
    
    def mul(a):
        '''
        计算剩数
        :param ct:
        :return:
        '''
    
    
        b = re.search(r'd+.?d*(*-?d+.?d*)+', a)
        if b is not None:
            b = b.group()
            rest = 1
            c = re.findall(r'-?d+.?d*', b)
            ls =[]
            for item in c:
                ls.append(float(item))
            for i1 in range(len(ls)):
                rest = rest * ls[i1]
            a = re.sub(r'd+.?d*(*-?d+.?d*)+', str(rest), a, 1)
            return a
    
    def div(a):
        '''
        计算出发
        :param a:
        :return:
        '''
    
        b = re.search(r'd+.?d*(/-?d+.?d*)+', a)
        if b is not None:
            b = b.group()
            c = re.findall(r'-?d+.?d*', b)
            ls =[]
            for i in c:
                ls.append(float(i))
            rest = ls[0]
            for i1 in range(1,len(ls)):
                rest = rest / ls[i1]
            a = re.sub(r'd+.?d*(/-?d+.?d*)+', str(rest), a, 1)
            return a
    
    def count(b):
        '''
        计算结果
        :return:
        '''
        while True:
            if '*' in b:
                c = b.split('*')
                if '/' in c[0]:
                    b = div(b)
                else:
                    b = mul(b)
            elif '/' in b:
                b = div(b)
    
            elif '+' or '-' in b:
                b = add_min(b)
                return b
            else:
                return b
    
    def main():
    
        while True:
    
            a = ''.join(input('33[53;1m请输入需要计算的算式:33[0m').split())
            if len(a)==0:continue
    
            while True:
                if '(' in a:
                    ct = re.search(r'(([^()]+))', a)
                    if ct is not None:
                        b = ct.groups()[0]
                        c = count(b)
                        a = re.sub(r'(([^()]+))', str(c), a, 1)
                else:
                    c = count(a)
                    print('33[43;1m计算的结果:33[0m',c)
                    break
    
    if __name__ == '__main__':
    
        main()
    View Code
  • 相关阅读:
    laravel的workflow流程插件
    [php]laravel框架容器管理的一些要点
    laravel 自带消息notification通知
    laravel5.5的定时任务详解(demo)
    Laravel核心代码学习
    laravel 加载指定版本的mongodb
    Linux安装Composer
    composer全量镜像使用方法
    laravel在github地址
    node anyproxy ssi简易支持
  • 原文地址:https://www.cnblogs.com/zhangxinxiao/p/7345607.html
Copyright © 2020-2023  润新知