資源簡介 (共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)多位數值的讀取該如何實現?課后思考 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫