劉 旭,馬文彬,吳 茜
(陸軍軍事交通學院 基礎部,天津 300161)
目前大學計算機程序設計類課程可供選擇的高級語言種類很多,常見的包括C、C++、C#、Java、Python 等,這些編程語言都各有特點和應用領域。當然,不同編程語言的學習難度曲線也各不相同。對于低年級大學生,尤其是非計算機專業(yè)的學生,選擇一門難度低、功能強大、應用范圍廣的語言入門十分關鍵[1]。
當今中外高校都困擾的問題是程序設計語言課程的教學方法無法達到預期的教學目標。美國大學率先引入Python 語言改革程序設計類課程教學,取得了明顯的效果。
Python 語言語法簡潔、清晰、易讀,應用非常廣泛,是一門非常適合非計算機專業(yè)大學生學習、能培養(yǎng)其計算思維和提高創(chuàng)新能力的編程語言。Python 輕語法、重解決問題,這就決定了學生在學習Python 時,難度起點低,容易入門。
Python 語言的優(yōu)勢還體現(xiàn)在類庫豐富、應用廣泛上[2]。目前,Python 語言擁有各類包庫超過10 萬個。這使Python 語言在教學時適用于各專業(yè)各層次的學生。其中,網(wǎng)絡爬蟲既有相對容易的Requests 庫,也有專業(yè)的Scrapy 爬蟲框架;科學計算有NumPy 庫;中文分詞有jieba 庫;繪圖可以使用相對簡單的、內(nèi)置的turtle 庫,也可以使用知名的二維繪圖Matplotlib 庫等[3]。
在選定理想的編程語言之后,接下來的問題就是如何講授才能讓學生了解和掌握這門語言。例如,程序設計類課程都要講解3 種控制結構,即順序結構、選擇結構、循環(huán)結構。以往的教學方法大多都采用講授基本語法和編程思路、畫流程圖、例題演示等形式,但教學效果并不理想。學生在學習初期出現(xiàn)了不理解、沒有思路或當時理解而獨立編程又無從下手的現(xiàn)象。這一方面由于學生剛開始學習還沒有形成編程的思維;另一方面則是因為代碼例題講解效果不夠直觀,無法真正幫助學生理解代碼。那么如何解決這一問題,使實例講解的過程發(fā)揮作用,并由此建立一種規(guī)則意識,把對問題和算法的認識用程序正確地表達出來?
在很多情況下,當文字無法表述清楚的時候,人們會想到圖像,比如機械原理的講解配圖、網(wǎng)頁內(nèi)容呈現(xiàn)的圖像輔助等,這些都說明了圖像具有形象直觀、能夠從整體上把握全局的優(yōu)點。
Python 有十分強大的類庫,其中在繪圖方面可以使用內(nèi)置turtle 庫繪出簡單且有規(guī)律的圖形。turtle 庫繪圖這部分內(nèi)容可以放在已經(jīng)介紹完順序結構、選擇結構以及單層循環(huán)結構之后再講解,這樣既可以介紹turtle 庫的繪圖方法,又可以通過修改相應代碼觀察生成圖像的變化,以此更直觀地鞏固和深入理解三種控制結構,并進一步學習復雜的多層循環(huán)結構。這里介紹3 種控制結構的不同案例圖形。
順序結構的特點是按照解決問題的順序?qū)懗鱿鄳恼Z句,執(zhí)行順序是自上而下,逐條語句執(zhí)行。在講這部分的內(nèi)容時,可讓學生先熟悉turtle 繪圖的常用命令(畫筆運動命令、畫筆控制命令、畫筆全局命令),邊學邊試邊練,從最簡單的圖形開始畫起,圖1 中的圖形都是由順序的筆畫完成的。
在連線圖形的基礎上可以嘗試填充顏色,從簡單彩色邊框到畫出指定角度對稱的圖案,讓學生逐步了解編程的思路,體會其中樂趣。
圖1 順序筆畫繪圖
選擇結構的特點在于判斷給定的條件,根據(jù)判斷的結果來控制程序的流程,見圖2。使用選擇結構語句時,要用條件表達式if 語句控制線條的走向和轉(zhuǎn)角,繪制出指定的圖案。
該例中用if 語句判定變量x,利用x的值控制線條的走向,當x大于0 時則水平方向繪制,否則垂直方向繪制,重復多個if-else 語句畫出了階梯形狀的圖形。上述這個例子是典型的單分支語句,當遇到需要兩個以上分支時,if 語句就不適用了,這時就要用到多分支語句,能使程序根據(jù)具體問題有多個分支。
圖2 下半部分演示了if-elif-else 多分支語句的控制流程,從圖中可看出利用判定變量y值所在的范圍區(qū)域控制線條的轉(zhuǎn)角從而繪制出多折線圖形。單分支與多分支語句是控制語句中的重點,要求學生理解并靈活運用。
循環(huán)語句的初衷是為了減少源程序重復書寫的工作量,用來描述重復執(zhí)行某段代碼的問題,這是程序設計中最能發(fā)揮計算機特長的程序結構。循環(huán)結構的本質(zhì)就是一個條件判斷語句和一個轉(zhuǎn)向語句的組合,在一定條件下反復執(zhí)行某段程序的流程結構,被反復執(zhí)行的程序被稱為循環(huán)體。循環(huán)語句由循環(huán)體及循環(huán)的終止條件兩部分組成。
圖2 選擇結構繪圖
循環(huán)結構是程序設計的3 種基本結構中較難的一種,利用while、for 語句的基本格式及執(zhí)行規(guī)則,采用由簡到繁的教學過程,體驗循環(huán)語句中如何設定循環(huán)變量、循環(huán)條件和循環(huán)體。
圖3 用for 循環(huán)結構,循環(huán)體中簡單的兩個語句就完成圖形的繪制,大大減少了重復代碼的工作量。這可使用問題引導、比較法等教學方法,以便最大限度讓學生舉一反三,從而掌握循環(huán)語句的簡單應用。
掌握了單層循環(huán)之后,通過修改單層循環(huán)代碼變換生成圖形進一步引出復雜多重循環(huán)。學生利用這種方式可以在理解簡單循環(huán)的基礎之上,學習多重循環(huán)結構并且對其加深理解。
圖3 循環(huán)結構繪圖
通過模仿、遷移、提高3 個階段的學習和操作,獲取循環(huán)語句解決問題的基本思想和方法,歸納循環(huán)語句解決問題的共性和適應性。
此外,關于算法的講解,也可以基于繪圖講解,比如在介紹遞歸算法時,可利用繪制分形樹圖案來分步驟講解算法思想,如圖4 繪制不同樣式的二叉樹,我們可以先給出左圖的基本代碼,由學生在此基礎之上修改循環(huán)體語句中畫筆長度以及轉(zhuǎn)角的值,以實現(xiàn)右邊兩幅圖的效果。以此讓學生在進一步理解循環(huán)體語句的同時,輔助學習遞歸算法。
這一部分知識的學習既是對循環(huán)結構的深入理解,又對順序、選擇結構有著很好的鞏固作用。在此類課程的考試中,主要是考察控制語句程序的代碼編寫,應指導學生在課下作相應的練習加以鞏固,這樣才能更好地使學生理解和掌握,也能加強對這一方面知識的興趣培養(yǎng)。
圖4 二叉樹繪圖
當然,文中所述教學方法的實施還有一些前提條件,比如學生需要具有預備知識儲備,在用圖例法講授之前需要學生已經(jīng)掌握了控制語句簡單例題,可以自行解決一些簡單的計算問題。教師在學生準備預備知識的環(huán)節(jié)可以采用多種手段,比如在線觀看教學視頻、閱讀文檔和教學案例、小組討論等[4]。這樣用新的教學法培養(yǎng)學生自主地、創(chuàng)造地學習,再用畫圖的形式輔助理解程序設計中遇到的復雜問題。在實際授課中,筆者嘗試將此法運用到控制語句的講授過程中,達到了較好的預期效果。