劉 旭,馬文彬,吳 茜
(陸軍軍事交通學(xué)院 基礎(chǔ)部,天津 300161)
目前大學(xué)計(jì)算機(jī)程序設(shè)計(jì)類課程可供選擇的高級(jí)語言種類很多,常見的包括C、C++、C#、Java、Python 等,這些編程語言都各有特點(diǎn)和應(yīng)用領(lǐng)域。當(dāng)然,不同編程語言的學(xué)習(xí)難度曲線也各不相同。對(duì)于低年級(jí)大學(xué)生,尤其是非計(jì)算機(jī)專業(yè)的學(xué)生,選擇一門難度低、功能強(qiáng)大、應(yīng)用范圍廣的語言入門十分關(guān)鍵[1]。
當(dāng)今中外高校都困擾的問題是程序設(shè)計(jì)語言課程的教學(xué)方法無法達(dá)到預(yù)期的教學(xué)目標(biāo)。美國大學(xué)率先引入Python 語言改革程序設(shè)計(jì)類課程教學(xué),取得了明顯的效果。
Python 語言語法簡(jiǎn)潔、清晰、易讀,應(yīng)用非常廣泛,是一門非常適合非計(jì)算機(jī)專業(yè)大學(xué)生學(xué)習(xí)、能培養(yǎng)其計(jì)算思維和提高創(chuàng)新能力的編程語言。Python 輕語法、重解決問題,這就決定了學(xué)生在學(xué)習(xí)Python 時(shí),難度起點(diǎn)低,容易入門。
Python 語言的優(yōu)勢(shì)還體現(xiàn)在類庫豐富、應(yīng)用廣泛上[2]。目前,Python 語言擁有各類包庫超過10 萬個(gè)。這使Python 語言在教學(xué)時(shí)適用于各專業(yè)各層次的學(xué)生。其中,網(wǎng)絡(luò)爬蟲既有相對(duì)容易的Requests 庫,也有專業(yè)的Scrapy 爬蟲框架;科學(xué)計(jì)算有NumPy 庫;中文分詞有jieba 庫;繪圖可以使用相對(duì)簡(jiǎn)單的、內(nèi)置的turtle 庫,也可以使用知名的二維繪圖Matplotlib 庫等[3]。
在選定理想的編程語言之后,接下來的問題就是如何講授才能讓學(xué)生了解和掌握這門語言。例如,程序設(shè)計(jì)類課程都要講解3 種控制結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。以往的教學(xué)方法大多都采用講授基本語法和編程思路、畫流程圖、例題演示等形式,但教學(xué)效果并不理想。學(xué)生在學(xué)習(xí)初期出現(xiàn)了不理解、沒有思路或當(dāng)時(shí)理解而獨(dú)立編程又無從下手的現(xiàn)象。這一方面由于學(xué)生剛開始學(xué)習(xí)還沒有形成編程的思維;另一方面則是因?yàn)榇a例題講解效果不夠直觀,無法真正幫助學(xué)生理解代碼。那么如何解決這一問題,使實(shí)例講解的過程發(fā)揮作用,并由此建立一種規(guī)則意識(shí),把對(duì)問題和算法的認(rèn)識(shí)用程序正確地表達(dá)出來?
在很多情況下,當(dāng)文字無法表述清楚的時(shí)候,人們會(huì)想到圖像,比如機(jī)械原理的講解配圖、網(wǎng)頁內(nèi)容呈現(xiàn)的圖像輔助等,這些都說明了圖像具有形象直觀、能夠從整體上把握全局的優(yōu)點(diǎn)。
Python 有十分強(qiáng)大的類庫,其中在繪圖方面可以使用內(nèi)置turtle 庫繪出簡(jiǎn)單且有規(guī)律的圖形。turtle 庫繪圖這部分內(nèi)容可以放在已經(jīng)介紹完順序結(jié)構(gòu)、選擇結(jié)構(gòu)以及單層循環(huán)結(jié)構(gòu)之后再講解,這樣既可以介紹turtle 庫的繪圖方法,又可以通過修改相應(yīng)代碼觀察生成圖像的變化,以此更直觀地鞏固和深入理解三種控制結(jié)構(gòu),并進(jìn)一步學(xué)習(xí)復(fù)雜的多層循環(huán)結(jié)構(gòu)。這里介紹3 種控制結(jié)構(gòu)的不同案例圖形。
順序結(jié)構(gòu)的特點(diǎn)是按照解決問題的順序?qū)懗鱿鄳?yīng)的語句,執(zhí)行順序是自上而下,逐條語句執(zhí)行。在講這部分的內(nèi)容時(shí),可讓學(xué)生先熟悉turtle 繪圖的常用命令(畫筆運(yùn)動(dòng)命令、畫筆控制命令、畫筆全局命令),邊學(xué)邊試邊練,從最簡(jiǎn)單的圖形開始畫起,圖1 中的圖形都是由順序的筆畫完成的。
在連線圖形的基礎(chǔ)上可以嘗試填充顏色,從簡(jiǎn)單彩色邊框到畫出指定角度對(duì)稱的圖案,讓學(xué)生逐步了解編程的思路,體會(huì)其中樂趣。

圖1 順序筆畫繪圖
選擇結(jié)構(gòu)的特點(diǎn)在于判斷給定的條件,根據(jù)判斷的結(jié)果來控制程序的流程,見圖2。使用選擇結(jié)構(gòu)語句時(shí),要用條件表達(dá)式if 語句控制線條的走向和轉(zhuǎn)角,繪制出指定的圖案。
該例中用if 語句判定變量x,利用x的值控制線條的走向,當(dāng)x大于0 時(shí)則水平方向繪制,否則垂直方向繪制,重復(fù)多個(gè)if-else 語句畫出了階梯形狀的圖形。上述這個(gè)例子是典型的單分支語句,當(dāng)遇到需要兩個(gè)以上分支時(shí),if 語句就不適用了,這時(shí)就要用到多分支語句,能使程序根據(jù)具體問題有多個(gè)分支。
圖2 下半部分演示了if-elif-else 多分支語句的控制流程,從圖中可看出利用判定變量y值所在的范圍區(qū)域控制線條的轉(zhuǎn)角從而繪制出多折線圖形。單分支與多分支語句是控制語句中的重點(diǎn),要求學(xué)生理解并靈活運(yùn)用。
循環(huán)語句的初衷是為了減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段代碼的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu)。循環(huán)結(jié)構(gòu)的本質(zhì)就是一個(gè)條件判斷語句和一個(gè)轉(zhuǎn)向語句的組合,在一定條件下反復(fù)執(zhí)行某段程序的流程結(jié)構(gòu),被反復(fù)執(zhí)行的程序被稱為循環(huán)體。循環(huán)語句由循環(huán)體及循環(huán)的終止條件兩部分組成。

圖2 選擇結(jié)構(gòu)繪圖
循環(huán)結(jié)構(gòu)是程序設(shè)計(jì)的3 種基本結(jié)構(gòu)中較難的一種,利用while、for 語句的基本格式及執(zhí)行規(guī)則,采用由簡(jiǎn)到繁的教學(xué)過程,體驗(yàn)循環(huán)語句中如何設(shè)定循環(huán)變量、循環(huán)條件和循環(huán)體。
圖3 用for 循環(huán)結(jié)構(gòu),循環(huán)體中簡(jiǎn)單的兩個(gè)語句就完成圖形的繪制,大大減少了重復(fù)代碼的工作量。這可使用問題引導(dǎo)、比較法等教學(xué)方法,以便最大限度讓學(xué)生舉一反三,從而掌握循環(huán)語句的簡(jiǎn)單應(yīng)用。
掌握了單層循環(huán)之后,通過修改單層循環(huán)代碼變換生成圖形進(jìn)一步引出復(fù)雜多重循環(huán)。學(xué)生利用這種方式可以在理解簡(jiǎn)單循環(huán)的基礎(chǔ)之上,學(xué)習(xí)多重循環(huán)結(jié)構(gòu)并且對(duì)其加深理解。

圖3 循環(huán)結(jié)構(gòu)繪圖
通過模仿、遷移、提高3 個(gè)階段的學(xué)習(xí)和操作,獲取循環(huán)語句解決問題的基本思想和方法,歸納循環(huán)語句解決問題的共性和適應(yīng)性。
此外,關(guān)于算法的講解,也可以基于繪圖講解,比如在介紹遞歸算法時(shí),可利用繪制分形樹圖案來分步驟講解算法思想,如圖4 繪制不同樣式的二叉樹,我們可以先給出左圖的基本代碼,由學(xué)生在此基礎(chǔ)之上修改循環(huán)體語句中畫筆長(zhǎng)度以及轉(zhuǎn)角的值,以實(shí)現(xiàn)右邊兩幅圖的效果。以此讓學(xué)生在進(jìn)一步理解循環(huán)體語句的同時(shí),輔助學(xué)習(xí)遞歸算法。
這一部分知識(shí)的學(xué)習(xí)既是對(duì)循環(huán)結(jié)構(gòu)的深入理解,又對(duì)順序、選擇結(jié)構(gòu)有著很好的鞏固作用。在此類課程的考試中,主要是考察控制語句程序的代碼編寫,應(yīng)指導(dǎo)學(xué)生在課下作相應(yīng)的練習(xí)加以鞏固,這樣才能更好地使學(xué)生理解和掌握,也能加強(qiáng)對(duì)這一方面知識(shí)的興趣培養(yǎng)。

圖4 二叉樹繪圖
當(dāng)然,文中所述教學(xué)方法的實(shí)施還有一些前提條件,比如學(xué)生需要具有預(yù)備知識(shí)儲(chǔ)備,在用圖例法講授之前需要學(xué)生已經(jīng)掌握了控制語句簡(jiǎn)單例題,可以自行解決一些簡(jiǎn)單的計(jì)算問題。教師在學(xué)生準(zhǔn)備預(yù)備知識(shí)的環(huán)節(jié)可以采用多種手段,比如在線觀看教學(xué)視頻、閱讀文檔和教學(xué)案例、小組討論等[4]。這樣用新的教學(xué)法培養(yǎng)學(xué)生自主地、創(chuàng)造地學(xué)習(xí),再用畫圖的形式輔助理解程序設(shè)計(jì)中遇到的復(fù)雜問題。在實(shí)際授課中,筆者嘗試將此法運(yùn)用到控制語句的講授過程中,達(dá)到了較好的預(yù)期效果。