1、题目
描述
通过把“中缀转后缀”和“后缀求值”两个算法功能集成在一起(非简单的顺序调用),实现对中缀表达式直接求值,新算法还是从左到右扫描中缀表达式,
但同时使用两个栈,一个暂存操作符,一个暂存操作数,来进行求值。
输入输出示例
输入样例1:
( 2 + 3 ) * 6 + 4 / 2
输出样例1:
32.0
输入样例2:
2 ^ 3 + 4 * 5 - 16 / 2
输出样例2:
20.0
输入样例3:
( 5 + 1 ) * 2 / 3 - 3 ^ ( 2 + 8 / 4 ) / 9 + 6
输出样例3:
1.0
2、思路
创建一个函数,接受参数为一个字符串,即一个中缀表达式,
其中每个数字或符号间由一个空格隔开;
返回一个整数,即求值的结果。(支持 + - * / ^ 五种运算)
其中“ / ”定义为真除True DIV,结果是浮点数类型
小技巧:
只需要把中缀表达式转化为后缀表达式中涉及’把操作符加入待输出列表‘的操作改为’从存储操作数的栈中pop两个元素进行运算并压入栈中‘的操作。
3、代码
#栈的实现(利用List)
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):