李偉
在算法與程序設(shè)計(jì)的教學(xué)中,計(jì)算機(jī)語言是算法與程序設(shè)計(jì)學(xué)習(xí)的基礎(chǔ),而學(xué)習(xí)一門計(jì)算機(jī)語言,需要學(xué)生經(jīng)歷語法基礎(chǔ)知識、程序控制結(jié)構(gòu)、算法設(shè)計(jì)、代碼編寫等過程,這一過程需要較長的時(shí)間來實(shí)踐。在這個(gè)過程中,根據(jù)教學(xué)目標(biāo)設(shè)置針對性較強(qiáng)的作業(yè),讓學(xué)生分析問題、抽象建模、設(shè)計(jì)算法、編寫代碼,最終在問題解決的過程中提升學(xué)科核心素養(yǎng),是一種普遍采用的教學(xué)手段。但在傳統(tǒng)的班級授課制下,一個(gè)班的學(xué)生往往比較多,在作業(yè)實(shí)施過程中,教師需要花費(fèi)較長的時(shí)間用于了解學(xué)生的作業(yè)達(dá)成情況,因此,借助信息技術(shù)手段以實(shí)時(shí)了解學(xué)情就顯得尤為重要。
本文以目前中小學(xué)普遍采用的基于Python語言的算法與程序設(shè)計(jì)教學(xué)為例,探究使用Python語言設(shè)計(jì)一個(gè)作業(yè)實(shí)時(shí)反饋系統(tǒng),用于Python的課堂作業(yè)實(shí)時(shí)反饋,以提升算法與程序設(shè)計(jì)的教學(xué)效率。
本文作業(yè)實(shí)時(shí)反饋系統(tǒng)的技術(shù)路線分析
1.作業(yè)實(shí)時(shí)反饋系統(tǒng)的設(shè)計(jì)原理
程序的規(guī)模有大有小,無論程序的規(guī)模如何,每個(gè)程序都有統(tǒng)一的運(yùn)算模式——輸入數(shù)據(jù)、處理數(shù)據(jù)和輸出數(shù)據(jù),即IPO(Input Process Output)方法。IPO既是程序設(shè)計(jì)的基本方法,也是描述計(jì)算問題的方式。因此,通過檢測特定的輸入數(shù)據(jù)、輸出數(shù)據(jù)是否正確,是否能解決特定問題,可以判定大多數(shù)Python作業(yè)有無達(dá)成;同時(shí),通過客戶端將結(jié)果數(shù)據(jù)發(fā)送至服務(wù)器,并由服務(wù)器將全班學(xué)生的數(shù)據(jù)綜合顯示于Web頁面,便可實(shí)現(xiàn)Python作業(yè)的實(shí)時(shí)反饋。
2.作業(yè)實(shí)時(shí)反饋系統(tǒng)的技術(shù)分析
本文所討論的Python作業(yè)實(shí)時(shí)反饋系統(tǒng)由服務(wù)器端、數(shù)據(jù)庫、Web頁面、客戶端等模塊構(gòu)成。整體架構(gòu)如圖1所示。
其中,服務(wù)器端部分屬于反饋系統(tǒng)的主邏輯,承載著作業(yè)數(shù)據(jù)的采集、控制數(shù)據(jù)存儲、提供Web頁面數(shù)據(jù)支持等功能;數(shù)據(jù)庫部分用于學(xué)生數(shù)據(jù)、作業(yè)反饋結(jié)果等數(shù)據(jù)的存儲;客戶端部分用于學(xué)生作業(yè)完成情況的邏輯判斷、向服務(wù)器端發(fā)送結(jié)果數(shù)據(jù);Web頁面部分用于將結(jié)果數(shù)據(jù)進(jìn)行展示,供學(xué)生與教師實(shí)時(shí)反饋。
本文作業(yè)實(shí)時(shí)反饋系統(tǒng)的設(shè)計(jì)開發(fā)
1.數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫主要用于學(xué)生信息、作業(yè)結(jié)果等數(shù)據(jù)的存儲。數(shù)據(jù)的采集可通過客戶端發(fā)送數(shù)據(jù)請求,服務(wù)器端將返回的數(shù)據(jù)存儲于數(shù)據(jù)庫中,同時(shí)將有效數(shù)據(jù)返回Web頁面用于前臺展示。本系統(tǒng)采用Python語言的SQLite3模塊構(gòu)建與操作數(shù)據(jù)庫,其數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)如下頁表所示。
建立數(shù)據(jù)庫的核心代碼如圖2所示。
2.服務(wù)器端程序編寫
服務(wù)器端程序采用Flask網(wǎng)頁框架編寫,主要包括2個(gè)主函數(shù),分別用于接收客戶端數(shù)據(jù)請示、Web頁面數(shù)據(jù)呈現(xiàn)。
用于接收客戶端數(shù)據(jù)請示的函數(shù)設(shè)計(jì)如圖3所示。
用于Web頁面數(shù)據(jù)呈現(xiàn)的函數(shù)設(shè)計(jì)如圖4所示。
3.Web頁面程序編寫
Web頁面程序采用Flask框架的模板文件編寫,其中的關(guān)鍵在于獲取服務(wù)器端程序傳遞的數(shù)據(jù),并在頁面中加以顯示。其核心代碼片段如圖5所示。
4.客戶端程序編寫
客戶端程序采用模塊設(shè)計(jì),即設(shè)計(jì)一個(gè)檢測作業(yè)是否正確的模塊,然后嵌入到學(xué)生作業(yè)中,在學(xué)生運(yùn)行Python程序時(shí),檢測模塊可以自動檢測作業(yè)完成情況,并將學(xué)生信息與檢測結(jié)果實(shí)時(shí)發(fā)送給服務(wù)器端。
檢測模塊核心代碼如下頁圖6所示。
本文Python作業(yè)實(shí)時(shí)反饋系統(tǒng)應(yīng)用實(shí)例
下面以浙江教育出版社《信息技術(shù)》八年級上冊第二單元第6課“多分支結(jié)構(gòu)程序設(shè)計(jì)”中的練習(xí)2為例,說明本系統(tǒng)的應(yīng)用過程。作業(yè)題目呈現(xiàn)如下頁圖7所示。
(1)分析作業(yè),確定輸入數(shù)據(jù)與輸出數(shù)據(jù)。
輸入數(shù)據(jù):由作業(yè)分析可知,本作業(yè)中的輸入數(shù)據(jù)有三個(gè),分別為三角形的三條邊長,以此確定輸入數(shù)據(jù)的變量名為:a,b,c。
輸出數(shù)據(jù):即結(jié)果數(shù)據(jù),本作業(yè)的輸出有兩種情況:若三條邊能構(gòu)成三角形,則輸出數(shù)據(jù)為通過海倫公式求出的三角形面積;若三條邊不能構(gòu)成三角形,則打印輸出“輸入的三條邊,不能構(gòu)成三角形!”。由于打印輸出無法進(jìn)行傳遞,因此,本作業(yè)可以在“else:”模塊結(jié)構(gòu)中加入一條語句“area=0”,以表示輸入的三條邊不能構(gòu)成三角形。以此確定輸出數(shù)據(jù)的變量名為:area。
(2)根據(jù)輸入與輸出數(shù)據(jù),修改檢測模塊核心代碼。
根據(jù)輸入與輸出數(shù)據(jù)的分析,可以修改檢測模塊的核心代碼(如圖8)。
(3)設(shè)計(jì)作業(yè)文件,嵌入檢測模塊。
在Python作業(yè)實(shí)時(shí)反饋系統(tǒng)的應(yīng)用過程中,教師在布置Python作業(yè)時(shí),應(yīng)提供一個(gè)模板文件,嵌入用于提交作業(yè)結(jié)果數(shù)據(jù)的核心代碼。在本實(shí)例中,學(xué)生作業(yè)中嵌入的核心代碼如圖9所示。
(4)學(xué)生完成作業(yè),運(yùn)行作業(yè)程度,提交檢測數(shù)據(jù)。服務(wù)器接收檢測數(shù)據(jù),顯示結(jié)果頁面。
當(dāng)學(xué)生運(yùn)行了作業(yè)程序時(shí),會觸發(fā)檢測代碼的執(zhí)行,檢測代碼自動匹配輸入數(shù)據(jù)與輸出數(shù)據(jù)是否符合作業(yè)設(shè)計(jì)要求,并根據(jù)結(jié)果向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器端在接收到數(shù)據(jù)后,一方面將結(jié)果存入數(shù)據(jù)庫,另一方面將結(jié)果返回給Web頁面,用于顯示。在作業(yè)結(jié)果反饋以后,教師即可根據(jù)情況實(shí)時(shí)調(diào)整教學(xué)進(jìn)程。如果全班完成情況較好,則可以加快教學(xué)進(jìn)程;如果完成情況較差,則可以放慢教學(xué)進(jìn)程;如果有部分學(xué)生經(jīng)常性地?zé)o法完成,則需要對這些學(xué)生進(jìn)行課外輔導(dǎo)。