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日

相关文章

  • python 多线程threading程序详情

    下面是关于“Python 多线程 threading 程序详情”的完整攻略。 概述 多线程是指在同一时间可以运行多个线程,这样可以使程序的执行更加高效。在 Python 中,多线程通过 threading 模块来实现。threading 模块中的 Thread 类可以创建一个线程对象。 创建线程对象 使用 Thread 类创建线程对象时,需要实现一个 run…

    python 2023年5月18日
    00
  • 详解Python如何使用Netmiko进行文件传输

    详解Python如何使用Netmiko进行文件传输 Netmiko是一个用于管理网络设备的Python库,支持多种网络设备类型和协议。除了支持命令行交互外,Netmiko还支持文件传输功能,可以方便地上传和下载文件。本文将介绍如何使用Netmiko进行文件传输。 实现步骤 步骤一:安装Netmiko库 在Python中,我们可以使用pip命令安装Netmik…

    python 2023年5月15日
    00
  • python实现将字符串中的数字提取出来然后求和

    如何使用Python将字符串中的数字提取出来并求和?这是一个常见的问题。下面是一个处理字符串中数字的Python示例程序: import re str1 = "a1b2c3d4" # 利用正则表达式查找数字 pattern = re.compile(r’\d+’) result = pattern.findall(str1) # 将查找到…

    python 2023年6月5日
    00
  • python plt.plot bar 如何设置绘图尺寸大小

    要设置Python Matplotlib库中plt.plot绘图的尺寸大小,我们要使用plt.subplots()函数并在其中设置figsize参数。figsize参数由两个值组成,即宽度和高度,单位为英寸。下面是一个简单的示例代码: import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [10, 2…

    python 2023年5月18日
    00
  • 深入理解Python3 内置函数大全

    深入理解Python3内置函数大全 Python是一门流行的编程语言,它带有许多内置函数,这些函数提供了方便的方法来处理数据。 什么是内置函数 内置函数是Python解释器提供的一组可用的函数。 Python解释器在启动时会执行这些函数的定义,因此它们不需要单独导入即可使用。 内置函数使用C编写,并集成在Python解释器中,这意味着它们通常比使用Pytho…

    python 2023年5月14日
    00
  • 显示纯文本和 HTML 版本的 Python SMTP 电子邮件

    【问题标题】:Python SMTP Emails Showing Both Plain and HTML Versions显示纯文本和 HTML 版本的 Python SMTP 电子邮件 【发布时间】:2023-04-01 18:33:01 【问题描述】: 发送一封 smtp 电子邮件,当我收到电子邮件时,它会背靠背显示纯文本版本和 html 版本。这样做…

    Python开发 2023年4月8日
    00
  • 详解Python 中sys.stdin.readline()的用法

    详解Python中sys.stdin.readline()的用法 1. 简介 sys.stdin 表示标准输入。sys.stdin.readline() 是读取一行标准输入的函数,返回的是字符串。与 input() 不同的是,sys.stdin.readline() 可以读取较长的字符串,以 ‘\n’ 为结束符。 2. 语法 下面就是 sys.stdin.r…

    python 2023年6月2日
    00
  • 利用python绘制中国地图(含省界、河流等)

    下面是关于“利用python绘制中国地图(含省界、河流等)”的一份完整攻略。 安装必要的库 绘制地图需要安装maplotlib和basemap库。 pip install matplotlib pip install basemap 获取地图数据 我们可以从GADM网站下载中国地图数据。地图数据包括省界、县界、河流等信息,我们可以按需选择需要的信息。 我们选…

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