计算一个表达式时,编译器平日应用后缀表达式,这种表达式不须要括号:

编写法度榜样实现后缀表达式求值函数。
思路
- 建立一个栈来存储待计算的操作数;
- 遍历字符串,碰到操作数则压入栈中,碰到操作符号则出栈操作数(n次),进行响应的计算,计算结不雅是新的操作数压回栈中,等待计算
- 按上述过程,遍历完全个表达式,栈中只剩下最终结不雅;
解决代码
- #!/use/bin/env python
- # _*_ coding:utf-8 _*_
- operators = { # 运算符操作表
- '+': lambda op1, op2: op1 + op2,
- '-': lambda op1, op2: op1 - op2,
- '*': lambda op1, op2: op1 * op2,
- '/': lambda op1, op2: op1 / op2,
- }
- def evalPostfix(e):
- """
- :param e: 后缀表达式
- :return: 正常情况下栈内的第一个元素就是计算好之后的值
- """
- tokens = e.split() # 把传过来的后缀表达式切分成列表
- stack = []
- for token in tokens: # 迭代列表中的元素
- if token.isdigit(): # 如不雅当前元素是数字
- stack.append(int(token)) # 就追加到栈里边
- elif token in operators.keys(): # 如不雅当前元素是操作符
- f = operators[token] # 获取运算符操作表中对应的lambda表达式
- op2 = stack.pop() # 根据先辈后出的原则,先让第二个元素出栈
- op1 = stack.pop() # 在让第一个元素出栈
- stack.append(f(op1, op2)) # 把计算的结不雅在放入到栈内
- return stack.pop() # 返回栈内的第一个元素
- result = evalPostfix('2 3 4 * +')
推荐阅读
走进淮北市运输治理处信息批示中间,一幅由6块液晶显示屏构成的监控屏幕映入眼帘,经由过程屏幕画面可以清楚地看到全市在运行出租车的及时地位和车内人员的音视频信息。批示中间以每周7日>>>详细阅读
本文标题:Python算法实战系列:栈
地址:http://www.17bianji.com/lsqh/35452.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示