zoukankan      html  css  js  c++  java
  • Python之字符串计算(计算器)

    Python之字符串计算(计算器)

    import re
    
    expression = '-1-2*((60+2*(-3-40.0+42425/5)*(9-2*5/3+357/553/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+56+(56-45)'
    question = eval(expression)
    print(question)
    
    
    def arithmetic(expression='1+1'):
        #     content = re.search('(([-+*/]*d+.?d*)+)', expression)  # (-3-40.0/5)
        content = re.search('(([-+*/]*d+.?d*)+)', expression)  # (-3-40.0/5)
        print(111, content)
        if content:
            content = content.group()
            content = content[1:-1]
            print('content:', content)
            replace_content = next_arithmetic(content)
            expression = re.sub('(([-+*/]*d+.?d*)+)', replace_content, expression, count=1)
            print('next_expression:', expression)
        else:
            answer = next_arithmetic(expression)
            return answer
        return arithmetic(expression)
    
    
    def next_arithmetic(content):
        while True:
            next_content_mul_div = re.search('d+.?d*[*/][-+]?d+.?d*', content)  # 找出带有*/的式子
            if next_content_mul_div:  # 如果content含有带有*/的式子
                next_content_mul_div = next_content_mul_div.group()
                print('next_content_mul_div:', next_content_mul_div)
                mul_div_content = mul_div(next_content_mul_div)  # 计算出带有*/的式子
                print('mul_div_content:', mul_div_content)
                content = re.sub('d+.?d*[*/][-+]?d+.?d*', str(mul_div_content), content, count=1)  # 把带有*/的式子计算出来后替换掉
                print('content:', content)
                continue
            next_content_add_sub = re.search('-?d+.?d*[-+][-+]?d+.?d*', content)  # 找出带有-+的式子
            if next_content_add_sub:  # 如果content含有带有+-的式子
                next_content_add_sub = next_content_add_sub.group()
                print('next_content_add_sub:', next_content_add_sub)
                add_sub_content = add_sub(next_content_add_sub)  # 计算出带有-+的式子
                print('add_sub_content:', add_sub_content)
                add_sub_content = str(add_sub_content)
                content = re.sub('-?d+.?d*[-+]-?d+.?d*', str(add_sub_content), content, count=1)  # 把带有-+的式子计算出来后替换掉
                print('content:', content)
                continue
            else:
                break
        return content
    
    
    def add_sub(content):
        if '+' in content:
            content = content.split('+')
            print(content)
            content = float(content[0]) + float(content[1])
            return content
        elif '-' in content:
            content = content.split('-')
            # 减法情况有多种
            if content[0] == '-' and content[2] == '-':
                # content = content.split('-')
                print(content)
                content = -float(content[1]) - float(content[-1])
                return content
            if content[0] == '-':
                # content = content.split('-')
                print(content)
                content = -float(content[1]) - float(content[-1])
                return content
            if content[1] == '-' and content[2] == '-':
                # content = content.split('-')
                print(content)
                content = -float(content[0]) + float(content[-1])
                return content
            if content[1] == '':
                # content = content.split('-')
                print(content)
                content = float(content[0]) - float(content[2])
                return content
            if content[0] == '' and content[2] != '':
                print(content)
                content = -float(content[1]) - float(content[2])
                return content
            if content[0] == '' and content[2] == '':
                print(content)
                content = -float(content[1]) + float(content[3])
                return content
            else:
                # content = content.split('-')
                print(content)
                content = float(content[0]) - float(content[1])
                return content
    
    
    def mul_div(content):
        if '*' in content:
            content = content.split('*')
            print(content)
            content = float(content[0]) * float(content[1])
            return content
        elif '/' in content:
            content = content.split('/')
            print(content)
            content = float(content[0]) / float(content[1])
            return content
    
    
    # expression = '1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
    expression = '-1-2*((60+2*(-3-40.0+42425/5)*(9-2*5/3+357/553/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+56+(56-45)'
    answer = arithmetic(expression)
    print(answer)
    
  • 相关阅读:
    ngx-bootstrap使用04 carousel组件
    ngx-bootstrap使用03 Alerts组件、利用Object.assign复制对象
    ngx-bootstrap使用02 Accordion组件的使用
    ngx-bootstrap使用01 安装ngx-bootstrap和bootstrap及其使用、外部样式引入
    SpringBoot11 读取properties文件、发送邮件
    SpringBoot10 整合JSP
    SpringBoot09 自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
    红帽系统制作yum本地源
    利用python数据分析panda学习笔记之基本功能
    利用python数据分析panda学习笔记之DataFrame
  • 原文地址:https://www.cnblogs.com/nickchen121/p/10825793.html
Copyright © 2011-2022 走看看