資源簡介 “口算批改”項目作業報告為了幫助小學生檢查口算作業,你所在的軟件開發團隊計劃開發一款“口算批改”APP,以提高口算批改的效率。該程序的基本設想是:將手機對著作業本拍照,利用OCR(光學字符識別)技術,從圖片中識別出算式,然后逐一計算,判斷答案是否正確。一、口算等式采集為了便于學生進行后面的“口算批改”項目的進行,可以采用手工錄入、互聯網查找、OCR采集等各種方式,采集口算等式,并將所有等式存入“算式.csv”文件中。二、抽象與建模過程采集到的算式存儲在“算式.csv”文件中,每行一個口算等式。判斷一個等式是否正確,需要計算等號左邊的運算式的值。等式中包括數字與運算符號,可以以字符串的形式,整體讀入,存入字符串變量中。對于等號左邊的算式,計算其結果時,用數字棧存儲算式中的數字,用符號棧存儲運算符號。由于算式中的運算符號加、減、乘、除、括號等存在著優先級別,以算式中的運算符號與符號棧棧頂元素進行比較,如果算式中的優先級別小于等于棧頂元素的優先級別,則棧頂元素出棧,否則入棧。如果是左括號,則直接入棧。如果是右括號,則棧中元素依次出棧,直至左括號。數字與運算符號的計算,把數字棧、符號棧結合起來操作。三、算法與設計采用文件讀取的方式,從“算式.csv”中讀取所有的算式。一個算式占一行,以字符串存儲該算式。利用字符串的find函數,找到“=”在算式中的位置,并用字符串中求子串的操作,取出等號左邊的算式與右邊的值。對于左邊等式,建立數字棧和符號棧,從左往右掃描,依次處理算式的中間計算過程。按如下方式處理:(1)當遇到的字符是數字時,繼續掃描,直至遇到非數字字符。把這次的數字串轉換成整數,壓入數字棧中。(2)當遇到的是非數字時,必定為運算符號(因為字符串中僅有數字字符與運算符號),設該運算符號為x,符號棧頂元素為y,分以下幾種情況處理:①如果x為“(”時,或棧空時,則把x壓入符號棧。②如果x為“+”或“-”時,同時y為“(”,則入棧,否則, y出棧,同時,把數字棧最頂上的兩個元素出棧,用運算符號y進行運算,并把運算結果壓入數字棧。再把x壓入符號棧。③如果x為“*”或“/”時,同時y為“*”或“/”時,則y出棧,同時,把數字棧最頂上的兩個元素出棧,用運算符號y進行運算,并把運算結果壓入數字棧。再把x壓入符號棧。④如果x為“)”時,則把符號棧中元素逐一出棧,直至遇到第一個左括號。⑤繼續掃描,直至左邊的算式結束,則數字棧中的元素為左邊的答案。⑥如果答案與等號右邊的值一樣時,則輸出“ ”,否則輸出“?”。四、編寫程序與測試用Python語言編程實現。import csvnumber=[0]*100ops=[' ']*100top1=-1top2=-1#數字棧頂兩個元素參與運算,并將運算結果壓入棧def cal():op1=number[top1]top1-=1op2=number[top1]top1-=1op=ops[top2]top2-=1anwser=0if op=='+':anwser=op2+op1if op=='-':anwser=op2-op1if op=='*':anwser=op2*op1if op=='/':anwser=op2/op1top1+=1number[top1]=anwserf=open("算式.csv","r")f_csv=csv.reader(f)for row in f_csv:exp=row[0]pos=exp.find('=')expleft=exp[0:pos]expright=exp[pos+1:]print(expleft)explen=len(expleft)i=0top1=-1top2=-1while inum=0while i='0' and expleft[i]<='9':num*=10+ord(expleft[i])-48i+=1top1+=1number[top1]=numif iif top2>-1 and ops[top2]!='(':cal;top2+=1ops[top2]=expleft[i]if iif top2>-1 and ops[top2]=='*' or ops[top2]=='/':cal;top2+=1ops[top2]=expleft[i]if expleft[i]=='(':top2+=1ops[top2]=expleft[i]if expleft[i]==')':while(ops[top2]!='('):cal;top2-=1top2-=1i+=1if number[top1]==int(expright):print("對")else:print("錯")f.close()四、結論與建議本項目在用字符串存儲后,在處理左邊的算式時,也可以先把中綴表達式轉后綴表達式,再用棧結構處理后綴表達式的值。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫