还剩9页未读,
继续阅读
成套系列资料,整套一键下载
浙教版(2019)高中信息技术 选修1 项目挑战: 口算批改 课件
展开
这是一份浙教版(2019)高中信息技术 选修1 项目挑战: 口算批改 课件,共17页。
项目挑战:口算批改单击此处添加副标题项目挑战:口算批改 为了帮助小学生检查口算作业,我们计划开发一款“口算批改”APP,以提高口算批改的效率。该程序的基本设想是:将手机对着作业本拍照,利用OCR(光学字符识别)技术,从图片中识别出算式,然后逐一计算,判断答案是否正确。知识回顾后缀表达式计算def op_js(n,m,op): s=0 if op=='*': s=n*m elif op=='/': s=n/m elif op=='+': s=n+m elif op=='-': s=n-m return s ss=[‘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) break else: 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]
项目挑战:口算批改单击此处添加副标题项目挑战:口算批改 为了帮助小学生检查口算作业,我们计划开发一款“口算批改”APP,以提高口算批改的效率。该程序的基本设想是:将手机对着作业本拍照,利用OCR(光学字符识别)技术,从图片中识别出算式,然后逐一计算,判断答案是否正确。知识回顾后缀表达式计算def op_js(n,m,op): s=0 if op=='*': s=n*m elif op=='/': s=n/m elif op=='+': s=n+m elif op=='-': s=n-m return s ss=[‘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) break else: 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]