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