广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python四则运算表达式求值示例详解
  • 262
分享到

python四则运算表达式求值示例详解

2024-04-02 19:04:59 262人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录四则运算表达式求值思路说明算法步骤代码四则运算表达式求值 思路说明 使用双栈来实现——存放数值的栈 nums 与存放运算符的栈&nbs

四则运算表达式求值

思路说明

使用双栈来实现——存放数值的栈 nums 与存放运算符的栈 ops.

算法步骤

  • 对原始表达式字符串 exp 进行预处理, 将其转为一个元素对应一个数值或运算符的列表 explist.
  • 遍历 explist , 每个元素依次压入对应的栈中. 每次压入后, 判断当前两栈顶是否可进行乘除运算.栈顶可进行乘除运算的充要条件是, ops 栈顶为<*> ,</> 之一, 且 nums 中的元素比 ops 中的元素恰好多一个. 如果可以运算, 则运算, 并将运算结果压回 nums 中.
  • explist 遍历完之后, 所有乘除运算都已进行, 此时 ops 中只剩加法与减法, 接下来开始另一个循环, 一直运算即可. 最后 nums 中剩余的唯一元素即为表达式的值.

代码

def operation(a, b, op: str):
    """
    计算一次运算的结果
    :param a: val
    :param b: val
    :param op: 运算符
    :return: val
    """
    if op == '+':
        return a+b
    elif op == '-':
        return a-b
    elif op == '*':
        return a*b
    elif op == '/':
        return a/b
    else:
        raise Exception('运算符不正确')
def exp_str2list(exp: str):
    """
    将表达式exp:str转成list,每个元素对应一个数<num>或运算符<op>.
    已知exp是标准的四则运算表达式字符串.
    :param exp: str,表达式
    :return: list
    """
    opset = {'+', '-', '*', '/'}  # 运算符集合
    flag = -1
    explist = list()
    for i, char in enumerate(exp):  # 对表达式字符串中的每个字符
        if char in opset:  # 若char是运算符
            explist.append(exp[flag+1:i])  # 上一个运算符到当前运算符中间为数字,保存到explist
            flag = i  # 更新flag到当前op位置
            explist.append(char)  # 当前op亦加入explist
    explist.append(exp[flag+1:])
    return explist
def calculate_expression(exp: str):
    """
    表达式求值. 计算字符串exp所代表的表达式的值, 返回一个数值
        已知exp是标准的四则运算表达式字符串, 且不含括号.
    :param exp: str, 表达式
    :return: val
    """
    opset = {'+', '-', '*', '/'}
    nums = list()  # 数栈
    ops = list()  # 运算符栈
    explist = exp_str2list(exp)
    print(explist)
    for e in explist:
        # e入栈
        if e in opset:  # 若e是运算符
            ops.append(e)
        else:
            nums.append(eval(e))
        # 若e是优先级高的乘除法, 且
        # nums与ops恰好匹配, 栈顶可以进行一次计算, 运算结果压入回nums
        if ops and ops[-1] in {'*', '/'} and len(nums) == len(ops) + 1:
            op = ops.pop()
            y = nums.pop()
            x = nums.pop()
            nums.append(operation(x, y, op))
    # 此时explist中元素已全部遍历, 同时乘除法均已被运算, 双栈只剩加减法有待运算. 众所周知, 加减法服从结合律, 接下来一路算到底即可.
    while ops:
        op = ops.pop()
        y = nums.pop()
        x = nums.pop()
        x_op_y = operation(x, y, op)
        nums.append(x_op_y)
    return nums[0]
if __name__ == '__main__':
    exp = '1*43+542+532*432'
    print(calculate_expression(exp))
    print(eval(exp))

参考 python开发任意表达式求值全功能示例

以上就是python四则运算表达式求值示例详解的详细内容,更多关于Python四则运算表达式求值的资料请关注编程网其它相关文章!

--结束END--

本文标题: python四则运算表达式求值示例详解

本文链接: https://www.lsjlt.com/news/119289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python四则运算表达式求值示例详解
    目录四则运算表达式求值思路说明算法步骤代码四则运算表达式求值 思路说明 使用双栈来实现——存放数值的栈 nums 与存放运算符的栈&nbs...
    99+
    2022-11-11
  • 四则运算表达式求值
    四则运算表达式求值两个要点1.中缀表达式转后缀表达式2.后缀表达式求值中缀表达式转后缀表达式从左到右遍历中缀表达式的每个数字和符号.若是数字就输出,成为后缀表达式的一部分.若是符号则判断其与栈顶符号的优先级,是右括号或者优先级低于等于栈顶符...
    99+
    2023-06-03
  • python四则运算表达式求值的方法
    这篇文章主要讲解了“python四则运算表达式求值的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python四则运算表达式求值的方法”吧!四则运算表达式求值思路说明使用双栈来实现&am...
    99+
    2023-07-02
  • 详解python的运算符与表达式
    目录表达式什么是表达式?运算符算术运算符赋值运算符比较运算符逻辑运算符成员运算符对象实例运算符位运算符总结表达式 什么是表达式? # • 表达式由一个或多个操作数通过操作符组合而成。...
    99+
    2022-11-12
  • python开发任意表达式求值全功能示例
    目录正文完整的源代码正文 在之前的基础上进一步实现了全功能表达式求值。 已支持浮点数已支持字符串的处理,前加一个"(类似lisp语法)支持减号/负号,一符两用机制支持所有算...
    99+
    2022-11-11
  • Python正则表达式中flags参数的实例详解
    目录flags参数忽略大小写多行模式匹配任何字符补充:正则表达式中的flags总结flags参数 re.I    IGNORECASE    ...
    99+
    2022-11-13
  • python正则表达式查找和替换内容的实例详解
    1、编写Python正则表达式字符串s。 2、使用re.compile将正则表达式编译成正则对象Patternp。 3、正则对象p调用p.search或p.findall或p.fin...
    99+
    2022-11-12
  • vue实例成员 插值表达式 过滤器基础教程示例详解
    目录一. 什么是Vue二.为什么学Vue三.如何使用Vue下载安装?插值表达式四、vue特点1.虚拟DOM2.数据的双向绑定3.单页面应用4.数据驱动五、Vue实例六、实例成员- 挂...
    99+
    2022-11-13
  • python 根据正则表达式提取指定的内容实例详解
    python 根据正则表达式提取指定的内容 正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。 下面演示了在python里,通过正则表达式来提取符合要求的内容。 实例代码: i...
    99+
    2022-06-04
    详解 实例 内容
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作