python题目及答案软件夸克怎么搜索python题目python题目猫狗
下载地址 https://share.weiyun.com/OvviwGnZ
资料目录 Python练习集100题 100道Python面试题 Python100经典练习题 Python经典题目100道题 Python题库(已收录100道真题) Python100例视频讲解课程 菜鸟教程Python教程100例 130道python练习题,涵盖基础内容的方方面面 Python考试题复习知识点试卷试题 PYTHON测试题和答案 python第一阶段考试题 Python经典面试题和答案解析 python期末考试复习试卷 python习题集大全(附答案解析) 老男孩Python全栈7期练习题(面试真题模拟) 尚观python第一阶段考试(面试真题模拟) 《Python程序设计基础与应用》习题答案 《Python快速编程入门》——课后题答案 Python编程基础张健 , 张良均课后习题及答案 Python程序设计基础及实践(慕课版)郭炜习题答案 Python程序设计基础习题答案与分析 python基础试题(含答案)
举例 中序转后序 1+2 这种表达式是中序表达式,运算符在运算对象的中间,还有一种表达式,运算符在运算对象的后面,称之为后序表达式,也叫逆波兰表达式。1+2 转成后序表达式后是 1 2 +, +号作用于它前面的两个运算对象。 后序表达式相比于中序表达式更容易计算,因此,这一小节,我要把中序表达式转换成后序表达式。 转换时要借助栈这个数据结构,变量postfix_lst 表示后序表达式,遍历中序表达式,根据当前值进行处理: • 如果遇到数值,则放入到postfix_lst中 • 遇到( 压如栈中 • 遇到 ),将栈顶元素弹出并放入到postfix_lst中,直到遇到(,最后弹出( • 遇到运算符,把栈顶元素弹出并放入到postfix_lst中,直到栈顶操作符的运算优先级小于当前运算符,最后将当前运算符压入栈 代码如下: # 运算优先级 priority_map = { '+': 1, '-': 1, '*': 2, '/': 2 }
class Stack(object): def __init__(self): self.items = [] self.count = 0
def push(self, item): """ 放入一个新的元素 :param item: :return: """ self.items.append(item) self.count += 1
def top(self): # 获得栈顶的元素 return self.items[self.count-1]
def size(self): # 返回栈的大小 return self.count
def pop(self): # 从栈顶移除一个元素 item = self.top() del self.items[self.count-1] self.count -= 1 return item def infix_exp_2_postfix_exp(exp): """ 中序表达式转后序表达式 """ stack = Stack() exp_lst = exp_to_lst(exp) postfix_lst = [] for item in exp_lst: # 如果是数值,直接放入到postfix_lst 中 if item.isdigit(): postfix_lst.append(item) elif item == '(': # 左括号要压栈 stack.push(item) elif item == ')': # 遇到右括号了,整个括号里的运算符都输出到postfix_lst while stack.top() != '(': postfix_lst.append(stack.pop()) # 弹出左括号 stack.pop() else: # 遇到运算符,把栈顶输出,直到栈顶的运算符优先级小于当前运算符 while stack.size() != 0 and stack.top() in ("+-*/")\ and priority_map[stack.top()] >= priority_map[item]: postfix_lst.append(stack.pop()) # 当前运算符优先级更高,压栈 stack.push(item)
# 最后栈里可能还会有运算符 while stack.size() != 0: postfix_lst.append(stack.pop())
return postfix_lst print infix_exp_2_postfix_exp("1 + 2") print infix_exp_2_postfix_exp(" 2 - 3 + 2 ") print infix_exp_2_postfix_exp("(1+(4+5+3)-3)+(9+8)") print infix_exp_2_postfix_exp("(1+(4+5+3)/4-3)+(6+8)*3") 程序输出结果为 ['1', '2', '+'] ['2', '3', '-', '2', '+'] ['1', '4', '5', '+', '3', '+', '+', '3', '-', '9', '8', '+', '+'] ['1', '4', '5', '+', '3', '+', '4', '/', '+', '3', '-', '6', '8', '+', '3', '*', '+']
|