python正则实现计算器功能

Python正则表达式可以用来匹配字符串中的某种格式,对于计算器而言,就可以利用正则表达式实现输入的字符串转化为计算结果的功能。

步骤如下:

  1. 将输入的字符串中的空格去除掉

代码块:

input_str = input_str.replace(' ', '')

这一步很重要,可以去除多余的空格,避免对后续的计算造成影响。

  1. 利用正则表达式匹配数字和运算符

我们可以定义正则表达式来匹配数字和运算符,例如用“\d”表示数字,“+”、“-”、“*”、“/”表示四则运算符号。

代码块:

import re

matches = re.findall(r'\d+|[-+*\/]', input_str)

使用Python的re模块,利用findall函数匹配字符串中满足正则表达式的部分。这个正则表达式中,“|”表示或的意思,匹配数字和运算符。

  1. 计算表达式

紧接着我们就可以对得到的数字和运算符进行简单计算,而这里主要需要注意一下运算符的优先级问题。比如说,“*”、“/”的优先级要高于“+”、“-”。

代码块:

result = 0
num_stack = [] # 数字栈
opr_stack = [] # 运算符栈

for match in matches:
    if match.isdigit(): # 如果是数字,直接进栈
        num_stack.append(int(match))
    else: # 如果是运算符,先判断栈顶元素是否需要出栈,然后入栈当前运算符
        if not opr_stack: # 运算符栈为空,直接入栈
            opr_stack.append(match)
        elif match in ['*', '/']: # 如果当前运算符为乘法或除法
            top = opr_stack[-1]
            if top in ['+', '-']: # 栈顶是加减,直接入栈
                opr_stack.append(match)
            else: # 栈顶是乘除,出栈计算
                opr = opr_stack.pop()
                num2 = num_stack.pop()
                num1 = num_stack.pop()
                if opr == '*':
                    num_stack.append(num1 * num2)
                else:
                    num_stack.append(num1 / num2)
                opr_stack.append(match)
        else: # 如果当前是加减符号
            opr = opr_stack.pop()
            num2 = num_stack.pop()
            num1 = num_stack.pop()
            if opr == '+':
                num_stack.append(num1 + num2)
            else:
                num_stack.append(num1 - num2)
            opr_stack.append(match)

# 把栈内剩下的元素全部出栈计算
while opr_stack:
    opr = opr_stack.pop()
    num2 = num_stack.pop()
    num1 = num_stack.pop()
    if opr == '+':
        num_stack.append(num1 + num2)
    else:
        num_stack.append(num1 - num2)

# 结果就是栈底元素
result = num_stack.pop()

至此,我们就可以得到输入字符串的计算结果。

下面是两个计算的示例:

输入字符串为“1 + 2 * 3 - 10 / 5”,计算结果为“7”。

输入字符串为“5 * ( 3 + 7 )”,计算结果为“50”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python正则实现计算器功能 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C语言调用Python代码的方法

    C语言调用Python代码的方法可以通过以下步骤实现: 安装Python开发环境和C语言开发环境 在调用Python代码之前需要安装Python开发环境和C语言开发环境,Python开发环境用来编写Python代码,C语言开发环境用来编写C语言代码。可以从官网下载安装或使用社区版本。 编写Python代码 编写需要调用的Python代码,并将其保存为.py文…

    python 2023年5月19日
    00
  • Python基础之hashlib模块subprocess模块logging模块

    当然可以,下面是 Python 中 hashlib、subprocess、logging 模块的详细讲解: hashlib 模块 hashlib 模块提供了一个模块接口,用于为任意数量的数据生成加密哈希值。在 Python3.x 中,hashlib 模块提供了许多加密哈希算法,包括 MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-…

    python 2023年5月20日
    00
  • python入门之算法学习

    下面是关于“Python入门之算法学习”的完整攻略。 1. 算法学习概述 算法是计算机科学的核心,是解决问题的有效方法。Python作为一种高级编语言,具简单易学、易读易写等特点,非常适合用于算法学习和实现。本攻略将介绍Python入门之算学习的基本知识实践技巧。 2. 算法学习基础 2.1 算法的定义 算法是一组有限的、清晰、可执行的规则,用于解决特定问题…

    python 2023年5月13日
    00
  • Python xml、字典、json、类四种数据类型如何实现互相转换

    转换Python数据类型之间的过程可以使用标准库中的 xml,json 模块实现。此外,Python自带的字典和类也可以进行互相转换。下面将详细介绍四种数据类型的转换方法: 1. XML与Python之间的转换 将Python数据类型转换成XML 使用xml.etree.ElementTree模块中Element 类中的方法tostring(),可以将Pyt…

    python 2023年5月31日
    00
  • python如何修改文件时间属性

    要修改文件时间属性,需要使用Python内置的os模块。os模块提供了utime()函数用于修改文件的访问时间和修改时间。 下面是具体的步骤: 步骤一:导入os模块 import os 步骤二:获取文件路径和修改时间 首先,你需要准备好要修改的文件的路径和新的修改时间。我们可以使用os.path模块下的getatime()、getmtime()函数来获取文件…

    python 2023年6月3日
    00
  • Pycharm如何对python文件进行打包

    当我们编写好一个 Python 应用程序后,有时候我们希望将其发布到其他机器上,此时打包就成为非常必要的一个环节。PyCharm 集成了一些打包工具,可以方便的打包 Python 应用程序。下面,我将详细介绍如何使用 PyCharm 对 Python 文件进行打包。 1. 新建PyCharm项目 在 PyCharm 中新建一个 Python 项目并添加需要打…

    python 2023年6月3日
    00
  • Python dict字典详解

    Python 中的字典是一种可变的、无序的数据类型,用于存储键值对(key-value)的数据结构。字典的特点在于可以快速的查找和修改键值对的值,是一种非常灵活、方便的数据结构。 字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。 字典类型所具有的主要特征如下…

    2023年2月14日
    00
  • Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解

    下面我将详细讲解“Python requests模块基础使用方法实例及高级应用(自动登录,抓取网页源码)实例详解”的完整攻略。 什么是requests模块? requests模块是Python语言中一个非常流行的HTTP客户端库,它简化了HTTP请求发送和处理过程。使用requests模块,我们可以轻松地发送HTTP请求和获取HTTP响应。requests模…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部