方 磊
(湖北文理學(xué)院 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,湖北 襄陽 441053)
根據(jù)2022年10月TIOBE編程社區(qū)指數(shù)(編程語言流行程度指標(biāo))可知,Python語言(17.08%)占據(jù)編程語言排行榜首位,排名超過C語言(15.21%)和Java語言(12.84%)的使用率(1)TIOBE.https://www.tiobe.com/tiobe-index/。目前,我國高校越來越多的專業(yè)將Python語言作為程序設(shè)計(jì)教學(xué)語言,一般在大學(xué)一年級開課,其中實(shí)訓(xùn)占一半以上學(xué)時。實(shí)踐訓(xùn)練是Python語言程序設(shè)計(jì)教學(xué)中的主要活動。
從Python語言程序設(shè)計(jì)實(shí)踐訓(xùn)練所涵蓋知識點(diǎn)來看,分為單個知識點(diǎn)的驗(yàn)證性訓(xùn)練、多個知識點(diǎn)相結(jié)合的應(yīng)用訓(xùn)練、面向小型應(yīng)用系統(tǒng)的綜合性訓(xùn)練等。這三類訓(xùn)練難度依次增大,旨在通過訓(xùn)練讓學(xué)生深化知識理解、拓展知識范圍、提升編程能力,達(dá)到編程的綜合運(yùn)用目的。但是,在實(shí)踐中存在以下不足:1)學(xué)生能夠完成單個知識點(diǎn)的驗(yàn)證性訓(xùn)練,一旦遇到較為復(fù)雜的問題就束手無策;2)訓(xùn)練涉及各個不同主題,其中有些主題的知識點(diǎn)較多,背景較復(fù)雜,學(xué)生付出了較多的時間精力,訓(xùn)練效果卻不明顯。3)學(xué)生往往按照老師的操作指令和訓(xùn)練模板開展綜合性訓(xùn)練,最終取得的實(shí)訓(xùn)效果不理想。導(dǎo)致這些不足的主要原因在于訓(xùn)練主題的內(nèi)在聯(lián)結(jié)度小或者缺少關(guān)聯(lián)性,學(xué)生對訓(xùn)練主題內(nèi)涵、知識點(diǎn)把握等呈現(xiàn)零散狀態(tài),不能及時地將單個知識點(diǎn)訓(xùn)練內(nèi)化到自己的知識結(jié)構(gòu)中并完成知識體系的聯(lián)結(jié)與整合。以至于學(xué)生做了較多的練習(xí),卻無法形成自己的知識體系框架,達(dá)不到知用合一的實(shí)訓(xùn)效果,更難以提高解決實(shí)際問題的能力。因此,如何讓學(xué)生在有限的時間內(nèi)由易到難、由淺入深地系統(tǒng)性掌握Python語言程序知識框架與設(shè)計(jì)是實(shí)訓(xùn)課中需要迫切解決的問題。本文基于支架式層次教學(xué)方式對Python語言程序設(shè)計(jì)實(shí)訓(xùn)展開必要的探討。
支架本是建筑施工中使用的腳手架,為建筑施工提供了必要支撐。實(shí)訓(xùn)教學(xué)引入“支架”概念,是指為學(xué)生學(xué)習(xí)程序設(shè)計(jì)提供必要的支撐,協(xié)助學(xué)生層次漸進(jìn)地建構(gòu)自己的知識和經(jīng)驗(yàn)[1]。支架式教學(xué)則是提供一種概念框架來幫助學(xué)習(xí)者逐層建構(gòu)新知識的過程。為此,先要把較復(fù)雜的綜合性主題分解成若干單個知識點(diǎn),通過對各單個知識點(diǎn)的運(yùn)用掌握以便把學(xué)習(xí)者的理解逐步引向深入[2]。支架可以在策略選擇、問題思考、行為判斷、效率提高以及如何使用工具等方面給予學(xué)習(xí)者以適當(dāng)?shù)膸椭鶾3]。支架式教學(xué)的理論基礎(chǔ)是“最近發(fā)展區(qū)理論”和建構(gòu)主義理論。
前蘇聯(lián)心理學(xué)家維果茨基認(rèn)為,個體的發(fā)展?fàn)顟B(tài)存在兩種不同的水平:實(shí)際的發(fā)展水平和潛在的發(fā)展水平。實(shí)際的發(fā)展水平是個體能夠獨(dú)立完成學(xué)習(xí)任務(wù)的能力水平,潛在的發(fā)展水平是個體在他人的幫助下才能夠完成任務(wù)的能力水平,兩者之間的區(qū)域是“最近發(fā)展區(qū)”。“最近發(fā)展區(qū)”理論認(rèn)為教師教學(xué)應(yīng)以潛在的發(fā)展水平為目標(biāo),在學(xué)習(xí)者的最近發(fā)展區(qū)搭建學(xué)習(xí)支架、開展教學(xué)[4]?!白罱l(fā)展區(qū)”在學(xué)習(xí)者成長中會被不斷更新,當(dāng)學(xué)習(xí)者能夠獨(dú)立完成先前在“最近發(fā)展區(qū)”內(nèi)的任務(wù)時,那么他的實(shí)際的發(fā)展水平已經(jīng)進(jìn)展為一個更高的水平區(qū)域,因此教師要不斷找準(zhǔn)新的“最鄰近發(fā)展區(qū)”,搭建一系列幫助學(xué)生自主建構(gòu)知識的學(xué)習(xí)支架[5]。
建構(gòu)主義理論的代表人物有皮亞杰、維果茨基、科恩伯格、斯滕伯格、卡茨等,建構(gòu)主義理論認(rèn)為認(rèn)知發(fā)展受同化、順應(yīng)、平衡三個過程的影響,同化是學(xué)習(xí)者把新的信息整合到自己原有認(rèn)知結(jié)構(gòu)內(nèi)的過程。順應(yīng)是個體的認(rèn)知結(jié)構(gòu)因新的信息而重構(gòu)的過程。個體在不斷同化和順應(yīng)的過程中建構(gòu)自己的認(rèn)知結(jié)構(gòu)并達(dá)到與周圍環(huán)境的平衡。個體的認(rèn)知結(jié)構(gòu)在平衡-不平衡-新平衡的過程中不斷地得到提高和發(fā)展。建構(gòu)主義理論強(qiáng)調(diào)學(xué)習(xí)是主動建構(gòu)自己知識體系的過程,知識或意義是學(xué)習(xí)者在新舊知識經(jīng)驗(yàn)之間反復(fù)的、雙向的相互作用過程中建構(gòu)的[6]。教學(xué)是引導(dǎo)學(xué)生從原有的知識經(jīng)驗(yàn)中生長出新的知識的過程,教師是學(xué)生主動建構(gòu)意義的促進(jìn)者、合作者和指導(dǎo)者[7]。
此模式是從一個主題(問題)出發(fā),通過基礎(chǔ)訓(xùn)練、拓展訓(xùn)練、綜合訓(xùn)練、探索訓(xùn)練逐層對實(shí)訓(xùn)增加新的要求,把若干知識點(diǎn)訓(xùn)練分批次納入到整體訓(xùn)練系列中?;A(chǔ)訓(xùn)練用于掌握基本知識點(diǎn),實(shí)現(xiàn)熟練寫出基礎(chǔ)代碼的目標(biāo);拓展訓(xùn)練是在基礎(chǔ)訓(xùn)練上增加新要求,擴(kuò)充單個知識內(nèi)容,使學(xué)生在應(yīng)用中拓展知識理解、建構(gòu)知識框架;綜合訓(xùn)練將基礎(chǔ)訓(xùn)練和拓展訓(xùn)練整合為一個較大主題,進(jìn)一步實(shí)現(xiàn)知識結(jié)構(gòu)融合;探索訓(xùn)練是在具備一定知識儲備和實(shí)踐技能之上,通過提供對其它較大主題材料的訓(xùn)練,達(dá)到對前三個階段訓(xùn)練所掌握的設(shè)計(jì)技能的融會貫通,強(qiáng)化自主程序設(shè)計(jì)能力。一個主題四個層次體現(xiàn)出訓(xùn)練的階段性區(qū)分、難度逐層增加,循序漸進(jìn)地提升程序設(shè)計(jì)能力的教育思想。
一個主題是將同一個設(shè)計(jì)問題貫穿于一系列實(shí)訓(xùn)過程中。對教師而言,有利于建立訓(xùn)練示例之間的關(guān)聯(lián)性;對學(xué)生而言,可以基于前面訓(xùn)練成果逐步添加訓(xùn)練內(nèi)容、增加訓(xùn)練難度,學(xué)生在一以貫之的主題下充分地思考、內(nèi)化吸收知識,建構(gòu)知識框架,進(jìn)入更高的訓(xùn)練層次,從而掌握系統(tǒng)化的知識和技能,形成程序設(shè)計(jì)的邏輯體系。
“素?cái)?shù)判斷”是程序設(shè)計(jì)教學(xué)中的一個知識點(diǎn),在程序設(shè)計(jì)中涉及多種流程控制,涵蓋一系列知識內(nèi)容的編程訓(xùn)練項(xiàng)目,下面以“素?cái)?shù)判斷”為例來解析一個主題四個層次的支架式程序設(shè)計(jì)訓(xùn)練模式。以素?cái)?shù)判斷為例的一個主題四個層次訓(xùn)練如圖1所示。
圖1 一個主題四個層次訓(xùn)練演變進(jìn)化圖
基礎(chǔ)訓(xùn)練是為學(xué)生解決較復(fù)雜問題提供基本的程序設(shè)計(jì)知識和能力支撐。學(xué)生通過訓(xùn)練可熟練寫出較簡單的程序語句,運(yùn)用流程控制,將問題的解決方案用Python語言表達(dá)出來,理解程序語句的內(nèi)涵及應(yīng)用場景、多樣化地用程序語句實(shí)現(xiàn)算法設(shè)計(jì)。
3.1.1 循環(huán)for語句的訓(xùn)練
示例1:利用for語句判斷用戶輸入的一個正整數(shù)(>1)是否為素?cái)?shù),如果是則輸出該數(shù)是素?cái)?shù)。
以示例1為訓(xùn)練起點(diǎn),通過訓(xùn)練,使學(xué)生獨(dú)立地寫出順序、選擇、循環(huán)結(jié)構(gòu)的簡單語句,逐步遷移到多種結(jié)構(gòu)混合應(yīng)用的層級,實(shí)現(xiàn)對程序IPO結(jié)構(gòu)(輸入、處理、輸出)的分辨能力,理解流程控制內(nèi)涵,建構(gòu)程序結(jié)構(gòu)基本概念、程序語句的適用規(guī)則。通過示例1的訓(xùn)練達(dá)到如表1所示的能力水平。
表1 示例1訓(xùn)練的知識及能力
3.1.2 在循環(huán)for語句基礎(chǔ)上拓展else子句訓(xùn)練
示例2:利用for循環(huán)和else子句判斷一個數(shù)是否是素?cái)?shù),并優(yōu)化程序設(shè)計(jì)代碼。
示例2引入知識點(diǎn)else子句,通過合并語句來優(yōu)化代碼,使代碼更簡潔。
示例2引發(fā)學(xué)生認(rèn)識else子句應(yīng)用場景,建立for循環(huán)與else子句間的關(guān)聯(lián),認(rèn)識和理解循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu)的內(nèi)在邏輯及代碼實(shí)現(xiàn),將else子句整合到已有的循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu)中去。
3.1.3 訓(xùn)練Python的while語句基于上述訓(xùn)練和認(rèn)識,再采用while循環(huán)來判斷素?cái)?shù),引導(dǎo)學(xué)生思考while循環(huán)結(jié)構(gòu)中循環(huán)體、循環(huán)控制條件、循環(huán)跳出環(huán)節(jié)的程序設(shè)計(jì)。
示例3:使用while循環(huán)判斷一個數(shù)是否為素?cái)?shù)。
示例3引導(dǎo)學(xué)生認(rèn)識for循環(huán)和while循環(huán)的程序語句的區(qū)別、循環(huán)體的區(qū)別、適用情況的區(qū)別,將標(biāo)志量、while循環(huán)及循環(huán)條件的控制手段等內(nèi)容擴(kuò)充到學(xué)生已有的知識結(jié)構(gòu)中,進(jìn)一步豐富對循環(huán)結(jié)構(gòu)的深入認(rèn)知。
3.1.4 訓(xùn)練while語句、else子句及使用命令行參數(shù)以示例3為生長點(diǎn),擴(kuò)充else子句及命令行參數(shù)訓(xùn)練。用戶交互方式是影響用戶體驗(yàn)的一個因素,掌握不同的用戶交互方式是程序設(shè)計(jì)的一項(xiàng)任務(wù)。
示例4:使用命令行參數(shù)、while循環(huán)和else子句來判斷一個數(shù)是否是素?cái)?shù)。
示例4將else子句配合while循環(huán)語句使用(示例2中else子句配合過for循環(huán)語句),幫助學(xué)生聯(lián)結(jié)起else子句的兩種運(yùn)用,擴(kuò)展對else子句的認(rèn)識。同時,示例4應(yīng)用命令行參數(shù)交互方式實(shí)現(xiàn)用戶交互,增加了學(xué)生的用戶交互手段。
通過圍繞4個示例逐層拓展的基礎(chǔ)訓(xùn)練,將各知識點(diǎn)逐漸擴(kuò)充到程序設(shè)計(jì)語言應(yīng)用中,學(xué)生采用不同的程序設(shè)計(jì)方法解決同一個問題,對循環(huán)語句進(jìn)行比較運(yùn)用,深化程序設(shè)計(jì)中的for循環(huán)、while循環(huán)、else子句,選擇結(jié)構(gòu)異同點(diǎn)的區(qū)別認(rèn)識。因此,基礎(chǔ)訓(xùn)練是通過單項(xiàng)程序語句的多次訓(xùn)練,讓學(xué)生以一個設(shè)計(jì)主題為出發(fā)點(diǎn),采用多種途徑反復(fù)訓(xùn)練,從而提高程序代碼的編寫水平和熟練程度,強(qiáng)化基礎(chǔ)問題的理解深度,漸次地拓寬加深學(xué)生知識的“最近發(fā)展區(qū)”。
經(jīng)過基礎(chǔ)訓(xùn)練后,學(xué)生比較熟練地運(yùn)用程序設(shè)計(jì)語言解決素?cái)?shù)問題,正確的編寫代碼、調(diào)試小程序,為下一步編寫較復(fù)雜的程序積累了經(jīng)驗(yàn),為提高訓(xùn)練層次打下了基礎(chǔ),做好了鋪墊。因此,依托基礎(chǔ)訓(xùn)練的積累,有針對性地提高問題的復(fù)雜度,增加程序代碼的編寫量。
3.2.1 判斷一系列數(shù)是否為素?cái)?shù)該示例試圖從判斷一個數(shù)為素?cái)?shù)拓展到對一批數(shù)為素?cái)?shù)的判斷,逐步提高問題的復(fù)雜度。
示例5:判斷一個區(qū)間(例如[100,300])內(nèi)的素?cái)?shù),輸出區(qū)間內(nèi)的素?cái)?shù)及其個數(shù)。
示例5可引發(fā)學(xué)生思考:重復(fù)一個操作流程,需要怎樣的流程結(jié)構(gòu)和程序語句;增加循環(huán)層次的多層循環(huán)是獨(dú)立的還是關(guān)聯(lián)的;若有關(guān)聯(lián)該會建立怎樣的關(guān)聯(lián)。對此,學(xué)生調(diào)動已有的經(jīng)驗(yàn)、知識、技能并進(jìn)行重組,以求解決新的問題,引導(dǎo)學(xué)生在已有技術(shù)知識經(jīng)驗(yàn)的基礎(chǔ)上建構(gòu)新的知識結(jié)構(gòu)。
3.2.2 用戶多次判斷素?cái)?shù)直到輸入退出指令示例5實(shí)現(xiàn)了循環(huán)判斷指定區(qū)間素?cái)?shù)的一次運(yùn)行,示例6要求程序在一次運(yùn)行中多次判斷素?cái)?shù),判斷次數(shù)由用戶輸入退出指令確定。
示例6:請用戶輸入一個整數(shù)(>1),判斷是否為素?cái)?shù),直到用戶輸入Q或q退出指令為止。
示例6要求學(xué)生思索和解決的問題是:將運(yùn)行程序的結(jié)束權(quán)交給用戶隨機(jī)輸入退出指令,目的是增強(qiáng)用戶在程序運(yùn)行過程中的交互性,隨時體現(xiàn)用戶運(yùn)行程序的意愿與要求。學(xué)生經(jīng)過思考、編寫代碼、調(diào)試運(yùn)行,認(rèn)識到程序設(shè)計(jì)中充分體現(xiàn)交互功能的重要性,通過訓(xùn)練實(shí)現(xiàn)學(xué)生能寫出強(qiáng)交互性程序的目標(biāo)。
3.2.3 設(shè)計(jì)函數(shù)完成素?cái)?shù)判斷的程序當(dāng)一段代碼需要被重復(fù)執(zhí)行時,將其設(shè)計(jì)為一個函數(shù),可以實(shí)現(xiàn)代碼的重用。示例7要求學(xué)生在具備上述能力前提下編寫一個具有判斷素?cái)?shù)功能的函數(shù)。
示例7:設(shè)計(jì)一個函數(shù)實(shí)現(xiàn)對素?cái)?shù)的判斷,若為素?cái)?shù),函數(shù)的返回值為True,否則為False。
示例7的目的是拓展學(xué)生認(rèn)知和學(xué)會設(shè)計(jì)函數(shù)API(application program interface)、函數(shù)體算法,正確運(yùn)用函數(shù)語法規(guī)則。學(xué)生可改造示例1至示例4代碼后遷移到函數(shù)內(nèi)部。經(jīng)此訓(xùn)練,使學(xué)生熟知函數(shù)名稱、函數(shù)參數(shù)、函數(shù)返回值等概念,熟練寫出相應(yīng)的Python語言代碼,掌握在不改變函數(shù)接口條件下的多種編寫函數(shù)體的方法,體會函數(shù)在程序設(shè)計(jì)中的作用。
函數(shù)是模塊化程序設(shè)計(jì)的基本構(gòu)件,示例7為學(xué)生學(xué)習(xí)模塊化程序設(shè)計(jì)做好了鋪墊。
3.2.4 隨機(jī)數(shù)和列表應(yīng)用訓(xùn)練以上示例中的程序數(shù)據(jù)是由用戶輸入,示例8訓(xùn)練要求數(shù)據(jù)由計(jì)算機(jī)生成。
示例8:計(jì)算機(jī)產(chǎn)生20個2—100之間的隨機(jī)整數(shù)保存于列表中,判斷這些隨機(jī)整數(shù)是素?cái)?shù)還是合數(shù)并保存于列表中,輸出這些隨機(jī)數(shù)與判斷結(jié)果。
示例8引導(dǎo)學(xué)生思考:產(chǎn)生特定區(qū)間內(nèi)的一個隨機(jī)整數(shù);產(chǎn)生多個隨機(jī)整數(shù);數(shù)據(jù)保存到列表的方法;利用示例7的函數(shù)方法解決示例8的問題并用代碼實(shí)現(xiàn),進(jìn)一步加深函數(shù)應(yīng)用理解。
同時,教師可以提出更廣泛的問題:隨機(jī)數(shù)如何產(chǎn)生;什么是隨機(jī)種子。用來擴(kuò)展學(xué)生對隨機(jī)數(shù)的認(rèn)識,為學(xué)生建構(gòu)隨機(jī)數(shù)產(chǎn)生機(jī)制的認(rèn)知體系。
3.2.5 檢查輸入數(shù)據(jù),確保程序接收到符合要求的數(shù)據(jù)學(xué)生熟練掌握了以上知識結(jié)構(gòu)體系,可考慮訓(xùn)練用戶輸入不合規(guī)格數(shù)據(jù)的編程問題。用戶一旦輸入負(fù)數(shù)或非數(shù)字符號,程序則會發(fā)生運(yùn)行錯誤,導(dǎo)致用戶體驗(yàn)不好。所以,應(yīng)全面考慮對用戶的輸入做合法性校驗(yàn),引導(dǎo)學(xué)生設(shè)計(jì)和編寫更嚴(yán)密的程序。
示例9:用戶輸入一個整數(shù)(>1),判斷是否為素?cái)?shù),要求程序接收到的輸入數(shù)據(jù)是合規(guī)數(shù)據(jù)。
在程序設(shè)計(jì)中學(xué)生應(yīng)當(dāng)高度重視:凡是接收用戶輸入的數(shù)據(jù),應(yīng)先判斷輸入的數(shù)據(jù)是否合規(guī),保證數(shù)據(jù)源的正確性。示例9訓(xùn)練學(xué)生在程序中實(shí)現(xiàn)對用戶輸入數(shù)據(jù)的控制和判斷,需要綜合運(yùn)用循環(huán)結(jié)構(gòu)語句與選擇結(jié)構(gòu)語句等程序設(shè)計(jì)方法。如此訓(xùn)練,進(jìn)一步關(guān)聯(lián)與組合學(xué)生已掌握的知識應(yīng)用,強(qiáng)化學(xué)生對輸入數(shù)據(jù)的檢驗(yàn)意識。
3.2.6 異常處理應(yīng)用保障程序接收到合規(guī)數(shù)據(jù)也可以通過異常處理來實(shí)現(xiàn)。
示例10:在判斷一個正整數(shù)是否為素?cái)?shù)的程序中引入異常處理。
示例10明確要求學(xué)生會運(yùn)用Python語言的異常處理機(jī)制,即用“try...except...”語句捕獲特定異常并執(zhí)行相應(yīng)處理,使程序具有更友好的用戶體驗(yàn)。在示例10訓(xùn)練中,教師引出常用的異常類,拓展學(xué)生對異常處理的學(xué)習(xí),建立異常處理的知識結(jié)構(gòu)。
3.2.7 保存數(shù)據(jù)于文件中以上程序在運(yùn)行時,數(shù)據(jù)輸入由用戶提供;輸出數(shù)據(jù)只顯示在運(yùn)行過程中,程序運(yùn)行一旦結(jié)束就丟失了。而解決實(shí)際應(yīng)用問題,一般要求從文件中讀取數(shù)據(jù),程序設(shè)計(jì)需要具備保存數(shù)據(jù)功能以方便數(shù)據(jù)再利用。示例11訓(xùn)練在程序設(shè)計(jì)中實(shí)現(xiàn)文件操作,進(jìn)一步完善程序功能。
示例11:從文件中讀取數(shù)據(jù)并找出素?cái)?shù),將素?cái)?shù)保存于新文件中。
示例11要求學(xué)生利用文件保存數(shù)據(jù),掌握打開、讀取、保存文件等相關(guān)操作,了解文件打開模式,認(rèn)識Python數(shù)據(jù)文件類型與編碼格式,按要求格式將數(shù)據(jù)寫入文件,加強(qiáng)學(xué)生在編程中對文件的操作和利用。
綜上11個示例,示例1至示例4是最基本的程序語言代碼,是支架層次訓(xùn)練中的最底層;示例5至示例11,是依托底層程序語言代碼,經(jīng)基礎(chǔ)訓(xùn)練遷移到拓展訓(xùn)練,在拓展訓(xùn)練示例代碼中不斷引入新的程序設(shè)計(jì)要求。因此,拓展訓(xùn)練的每個示例都是基于基礎(chǔ)訓(xùn)練引入新要求,加深拓寬了示例內(nèi)涵。目的在于經(jīng)過基礎(chǔ)訓(xùn)練逐層向拓展訓(xùn)練加深,逐步提高學(xué)生解決問題的知識水平,漸次擴(kuò)展學(xué)生的知識結(jié)構(gòu)??傊?,通過拓展訓(xùn)練后,學(xué)生既鞏固了基礎(chǔ)訓(xùn)練的知識內(nèi)容,又依據(jù)拓展訓(xùn)練建構(gòu)更高層次的知識體系。
經(jīng)過示例1至示例11的基礎(chǔ)訓(xùn)練和拓展訓(xùn)練,學(xué)生掌握了一系列通過編寫Python程序語言代碼解決問題的方案,熟悉了相關(guān)示例所涉及的知識內(nèi)容與結(jié)構(gòu)體系。下面以此為支撐開展示例12和示例13的綜合訓(xùn)練,通過進(jìn)一步提高程序設(shè)計(jì)要求與難度,使學(xué)生將編程活動上升到程序設(shè)計(jì)思想的養(yǎng)成層面,讓學(xué)生逐步形成模塊化程序設(shè)計(jì)思想,以期編寫和調(diào)試長代碼程序。
示例12:設(shè)計(jì)程序?qū)崿F(xiàn)如下功能:由用戶輸入一個正整數(shù),判斷是否是素?cái)?shù),直到用戶輸入q或Q指令退出程序。要求:1)保證程序接收到的輸入數(shù)據(jù)符合規(guī)格;2)將用戶輸入且判斷為素?cái)?shù)的數(shù)據(jù)保存于一個文件中;3)使用函數(shù)實(shí)現(xiàn)素?cái)?shù)判斷;4)程序自動運(yùn)行,直至用戶輸入q或Q指令退出。
示例12將拓展訓(xùn)練中的多個示例結(jié)合起來,訓(xùn)練學(xué)生把相關(guān)的程序代碼組裝成為一個小型應(yīng)用程序,從而形成一個較大的應(yīng)用開發(fā)程序。
示例13:以示例12訓(xùn)練為基礎(chǔ),為達(dá)成模塊化要求目的,在程序中設(shè)計(jì)一個菜單可實(shí)現(xiàn)如下功能:1)輸入數(shù)據(jù);2)判斷素?cái)?shù);3)保存素?cái)?shù);4)退出。便于用戶按菜單進(jìn)行交互操作。
在示例13中,增加了菜單程序設(shè)計(jì),使開發(fā)的程序具有強(qiáng)交互性,為較大型程序開發(fā)應(yīng)用做準(zhǔn)備,而且再次加深學(xué)生理解模塊化程序設(shè)計(jì)思想并運(yùn)用到綜合訓(xùn)練中。同時,強(qiáng)化訓(xùn)練學(xué)生繪制程序功能模塊圖、流程圖等,為學(xué)生設(shè)計(jì)較大的應(yīng)用程序提供寬基礎(chǔ)、強(qiáng)技能支撐。
在綜合應(yīng)用訓(xùn)練中,學(xué)生依托基礎(chǔ)訓(xùn)練、拓展訓(xùn)練中積累的程序設(shè)計(jì)經(jīng)驗(yàn)和編寫代碼技能,基于模塊化設(shè)計(jì)思想再一次構(gòu)造含有基礎(chǔ)代碼和拓展代碼的較大型完整程序。這是一個再設(shè)計(jì)過程,而非簡單的組合。同時,要向?qū)W生特別強(qiáng)調(diào)加強(qiáng)程序的調(diào)試訓(xùn)練,充分掌握調(diào)試程序技能。
學(xué)生掌握了程序設(shè)計(jì)的基本方法,具有了較扎實(shí)的知識儲備和實(shí)踐技能基礎(chǔ),適時地開展延伸應(yīng)用訓(xùn)練,一方面保持學(xué)生利用Python語言開展程序設(shè)計(jì)的不斷進(jìn)階,另一方面希望促進(jìn)學(xué)生的學(xué)習(xí)意識提升到自主探索境界。為此,列舉示例14,將圖形界面擴(kuò)充到素?cái)?shù)判斷應(yīng)用中,以促進(jìn)學(xué)生在程序設(shè)計(jì)應(yīng)用中的自主探索。
示例14:運(yùn)用Python語言設(shè)計(jì)具有圖2和圖3界面的程序,實(shí)現(xiàn)對素?cái)?shù)的判斷。
圖形界面是深受用戶歡迎的計(jì)算機(jī)應(yīng)用程序操作方式。在圖形界面程序設(shè)計(jì)中,需要教師提供相應(yīng)的范例、教程、參考文檔等,為學(xué)生自主探索學(xué)習(xí)提供幫助。學(xué)生要將學(xué)習(xí)延伸到課外,通過自主探索訓(xùn)練,使自己的知識儲備、編程思想、操作技能等各方面來一次大的飛躍,從而形成總體的Python程序設(shè)計(jì)與代碼編寫的知識體系與應(yīng)用架構(gòu)。
學(xué)生經(jīng)過一個主題四個層次由易到難的多重遞進(jìn)訓(xùn)練后,在流暢地表述知識體系與提供問題解決方案、快速編寫調(diào)試代碼、自主尋找學(xué)習(xí)新知識途徑等方面,較快地突破知識表述、代碼編寫與調(diào)試、設(shè)計(jì)思想認(rèn)識等難點(diǎn),實(shí)現(xiàn)了對難度較高項(xiàng)目的編程能力提升。既幫助學(xué)生整合了零碎的編程知識,形成較為完整的理論體系,又在有限的教學(xué)時間里讓學(xué)生把握程序設(shè)計(jì)的全景認(rèn)識,并運(yùn)用于編程實(shí)踐、內(nèi)化所學(xué)知識,從而自主探索新的知識與實(shí)踐學(xué)習(xí)。如表2所示。
表2 知識結(jié)構(gòu)融合與建構(gòu)過程
文章圍繞一個主題(問題)的四個漸進(jìn)層次訓(xùn)練,列舉了若干示例,前一個示例是后一個示例的基礎(chǔ)與支撐,后一個示例又是前一個示例的知識與應(yīng)用的新生長。依此,設(shè)計(jì)出一系列訓(xùn)練示例,如搭支架式地不斷進(jìn)階Python程序設(shè)計(jì)知識體系和應(yīng)用平臺。這些訓(xùn)練示例覆蓋了Python程序設(shè)計(jì)基礎(chǔ)的重要知識點(diǎn),蘊(yùn)含了知識之間的邏輯繼承和發(fā)展關(guān)系。四個層次訓(xùn)練的復(fù)雜度、難度不斷提高,也不斷地提升了學(xué)生的程序設(shè)計(jì)知識水平和應(yīng)用能力。更重要的是,在Python語言程序設(shè)計(jì)編寫代碼支架式訓(xùn)練中,蘊(yùn)含了學(xué)生由編寫簡單程序代碼、編寫結(jié)構(gòu)程序代碼,進(jìn)階到掌握程序設(shè)計(jì)的文件操作、筑牢模塊化程序設(shè)計(jì)理念,再到交互式程序設(shè)計(jì)應(yīng)用、圖形界面程序設(shè)計(jì)以及貫穿整個訓(xùn)練過程的程序調(diào)試能力養(yǎng)成的隱形歷程。這說明基礎(chǔ)訓(xùn)練、拓展訓(xùn)練、綜合應(yīng)用、自主探索的支架式實(shí)訓(xùn)教學(xué),便于實(shí)訓(xùn)教學(xué)的順利開展。總之,通過一系列針對性強(qiáng)的示例,支架式的四個層次訓(xùn)練,使學(xué)生能夠熟練地編寫正確的程序代碼,領(lǐng)會并掌握程序設(shè)計(jì)的思想與方法,內(nèi)化編程知識、強(qiáng)化編程技能,并匯入到學(xué)生自己的知識體系結(jié)構(gòu)中。
Python語言程序設(shè)計(jì)課程內(nèi)容龐雜,知識點(diǎn)多,教師可采用一個主題四個層次的支架式實(shí)訓(xùn)模式設(shè)計(jì)出針對性強(qiáng)、指向明確的實(shí)訓(xùn)項(xiàng)目,預(yù)設(shè)較完備的知識網(wǎng)絡(luò),方便學(xué)生經(jīng)由學(xué)習(xí)與實(shí)訓(xùn),從多維度建構(gòu)自己的程序設(shè)計(jì)知識體系。當(dāng)然,教師對實(shí)訓(xùn)的預(yù)期安排及指向明確的實(shí)踐指導(dǎo)也是達(dá)成訓(xùn)練目標(biāo)的重要內(nèi)容,對此可以另行展開探討。