欢迎光临
我们一直在努力

逆波兰表示法

"""
逆波兰表示法
逆波兰表示法(英语:Reverse Polish notation,缩写RPN,
或逆波兰记法、逆卢卡西维茨记法),
是一种由波兰数学家扬·卢卡西维茨于1920年引入的数学表达式形式。
在逆波兰记法中,所有操作符置于操作数的后面,
因此也被称为后缓示法、后序表示法。
逆波兰记法不需要括号来标识操作符的优先级。
计算'11 6 9 3 + -11 * / * 17 + 5 -'的结果。
"""
import operator

class Stack:
    """
    栈类,用于存储和操作数据。
    """
    def __init__(self):
        """
        初始化栈对象,设置空的items列表。
        """
        self.items = []

    def push(self, item):
        """
        将元素压入栈顶。

        参数:
        item - 要压入栈的元素。
        """
        self.items.append(item)

    def pop(self):
        """
        弹出并返回栈顶元素。

        返回:
        栈顶元素。
        """
        return self.items.pop()

def eval_rpn(expr):
    """
    评估逆波兰表达式。

    参数:
    expr - 逆波兰表达式的字符串表示。

    返回:
    表达式的计算结果。
    """
    operators = {
        '+': operator.add,
        '-': operator.sub,
        '*': operator.mul,
        '/': operator.truediv,
    }
    stack = Stack()
    for item in expr.split(" "):
        if item in '+-*/':
            num1 = stack.pop()
            num2 = stack.pop()
            stack.push(operators[item](num2, num1))
        else:
            stack.push(int(item))
    return round(stack.pop(), 2)

print(eval_rpn('11 6 9 3 + -11 * / * 17 + 5 -'))

赞(0) 打赏
未经允许不得转载:创想未来 » 逆波兰表示法

评论 抢沙发

评论前必须登录!

 

更好的Python学习

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册