python算法设计 - 后缀表达式

python算法设计源码:https://github.com/MakerChen66/Python3Algorithm

版权声明:原创不易,本文禁止抄袭、转载,侵权必究!

一、后缀表达式

虽然人们主要使用代数表达式中的中缀表达式记法,但是后缀表达式(也叫逆波兰表达式)更容易在算法上进行解析。

中缀表达式:二元运算符总是置于与之相关的两个运算对象之间,比如 5 + 2 ,9 * 4
后缀表达式:二元运算符置于其运算对象之后,比如 5 2 + ,9 4 *

例如,下面的表达式是等价的,第一个是中缀表达式,第二个是后缀表达式。
2 * (1 + 3) = 2 1 3 + *

当你实现你的第一个表达式解析器时,后缀和前缀表示法是最好的方法。对应到栈就是:入栈(append()),出栈(pop())…

Python算法实现:

math = {
    
    
  '+': float.__add__,
  '-': float.__sub__,
  '*': float.__mul__,
  '/': float.__truediv__,
  '^': float.__pow__,
}
def postfix(expression):
	stack = []

	for x in expression.split():
		if x in math:
			x = math[x](stack.pop(-2), stack.pop(-1))
		else:
			x = float(x)
		stack.append(x)

	print(stack.pop())

postfix('1 2 + 4 3 - + 10 5 / *')  # 相当于计算 ((1+2)+(4-3))*(10/5)

注意:stack.append()表示入栈,stack.pop()表示出栈,split()表示分割

输出结果:
在这里插入图片描述
如图所示,运算结果是8,结果正确

二、源码下载

python算法设计源码下载:

三、作者Info

作者:小鸿的摸鱼日常,Goal:让编程更有趣!

原创微信公众号:『小鸿星空科技』,专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

猜你喜欢

转载自blog.csdn.net/qq_44000141/article/details/122352202