资源简介 (共17张PPT)项目挑战:口算批改单击此处添加副标题项目挑战:口算批改为了帮助小学生检查口算作业,我们计划开发一款“口算批改”APP,以提高口算批改的效率。该程序的基本设想是:将手机对着作业本拍照,利用OCR(光学字符识别)技术,从图片中识别出算式,然后逐一计算,判断答案是否正确。知识回顾后缀表达式计算def op_js(n,m,op):s=0if op=='*':s=n*melif op=='/':s=n/melif op=='+':s=n+melif op=='-':s=n-mreturn sss=[‘6’,’7’,’8’,’5’,’-’,’*’,’+’]stack=[ ]for i in ① :if i in '+-*/':n2=stack.pop()n1=stack.pop()stack.append( ② )else:stack.append(int(i))print(‘结果为:’+ ③ )op_js(n1,n2,i)str(stack[0])ss是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。与前缀或后缀不同的是,中缀表达式中括号是必需的。还需要考虑算数运算符的优先级。中缀表达式知识链接探索新知——中缀转后缀中缀表达式后缀表达式6+7-86 7 + 8 -6+7*8-56 7 8 * + 5 -6+7*(8-5)6 7 8 5 - * +1.转换前后,数字的顺序有无改变?2.转换前后,运算符的顺序有无改变?3.可以用什么数据结构来处理运算符?没有发生改变发生改变栈结构①创建一个符号栈ops,用来暂存运算符 ops=[]②创建一个列表exp,用来存放后缀表达式 exp=[]中缀转后缀——抽象与建模活动一:同级表达式转换活动二:不同级表达式转换活动三:小括号表达式转换中缀转后缀活动一:同级表达式转换取到运算符时,该进行什么判断中缀转后缀——设计算法栈为空,入栈栈不为空,栈顶元素出栈,再入栈s='6+7-8'ops=[]exp=[]for ch in s:if '0'<=ch<='9':________①_________else:while len(ops)!=0:op= ____②____exp.append(op)else:______③______while ops:op=ops.pop()exp.append(op)print(exp)exp.append(ch)ops.pop()ops.append(ch)活动一:同级表达式转换不同优先级的运算符如何出入ops栈如何表达运算符的优先级使用字典来表示运算符的优先级活动二:不同级表达式转换中缀转后缀——设计算法优先级高的先计算,先出栈①栈为空,入栈②当前优先级>栈顶元素优先级,直接入栈③当前优先级<=栈顶元素优先级,栈顶元素出栈活动二:不同级表达式转换s='6+7*8-5’________________………while len(ops)!=0:op=ops.pop()if ops_rules[ch]>ops_rules[op]:ops.append(op)ops.append(ch)breakelse:exp.append(op)else:ops.append(ch)………ops_rules={'+':1,'-':1,'*':2,'/':2}s='6+7-8'ops=[];exp=[]for ch in s:if '0'<=ch<='9':exp.append(ch)else:while len(ops)!=0:op=ops.pop()exp.append(op)else:ops.append(ch)while ops:op=ops.pop()exp.append(op)print(exp)若取到’(‘,如何存储若取到’)’,该如何处理活动三:小括号表达式转换中缀转后缀——设计算法直接入栈ops栈顶元素依次出栈,直到取到“(“s='6+7*(8-5)’………for ch in s:if '0'<=ch<='9':exp.append(ch)elif _______①______:while len(ops)!=0:op=ops.pop()if _____②______ ops_rules[op]ops.append(op)ops.append(ch)breakelse:exp.append(op)else:ops.append(ch)for ch in s:if '0'<=ch<='9':exp.append(ch)else:while len(ops)!=0:op=ops.pop()if ops_rules[op]ops.append(op)ops.append(ch)breakelse:exp.append(op)else:ops.append(ch)ch in '+-*/'op==‘(‘ or活动三:小括号表达式转换f=open('shibie.txt','r')line=f.readline()while line:pos=line.find('=')expleft=line[:pos]expright=line[pos+1:]expleft=change(expleft)if ________①________________==int(expright):print(expleft+'='+expright+" ")else:print(expleft+'='+expright+" ")line=f.readline()判断等式after_js(mid_to_after(expleft))小结中 缀 转 后 缀 同级运算符 栈为空,入栈栈不为空,栈顶元素出栈,再入栈不同级运算符 优先级高的先计算,先出栈①栈为空,入栈②当前优先级>栈顶元素优先级,直接入栈③当前优先级<=栈顶元素优先级,栈顶元素出栈小括号 ①“(“直接入栈②取到“)“,栈顶元素依次出栈,直到取到“(“if '0'<=ch<='9':exp.append(ch)多位数值的读取该如何实现?课后思考 展开更多...... 收起↑ 资源预览