林衛(wèi)中
(景德鎮(zhèn)陶瓷大學信息工程學院,景德鎮(zhèn) 333000)
結(jié)構化的計算機程序設計中最重要的思想是“自頂向下,逐步求精”,并且在這一過程中僅使用順序、選擇和循環(huán)三種程序結(jié)構,并使用模塊化的函數(shù)編程解決問題。分析往年學生在學習程序設計入門課程如《C語言程序設計》或《Java語言程序設計》中的困惑,我們發(fā)現(xiàn)學生開始學習時重心往往放到繁瑣的語法學習上,而對程序結(jié)構和函數(shù)的掌握比較困難。
Python語言是目前最接近自然語言的編程語言,它具有簡潔、高效和生態(tài)三個明顯的優(yōu)勢[1]。它提供了豐富的圖形計算生態(tài),借助Turtle庫可以簡單方便地實現(xiàn)圖形繪制,在Python教學中引入圖形繪制,可以達到增強學生學習興趣,培養(yǎng)學生現(xiàn)代計算思維的目的[2]。
目前,C語言程序設計和Java語言程序設計是絕大多數(shù)學校首選的計算機程序設計入門語言。對于初學程序設計的學生而言,C或Java語言入門比較困難,主要原因如下。
(1)入門語法繁瑣
C(或Java)語言是強類型語言,基礎語法要求復雜且嚴格,對變量的聲明和使用非常嚴格。另外它們的計算生態(tài)不如Python豐富,如輸入和輸出的處理,C語言中輸出函數(shù)printf細節(jié)太繁瑣,而Java中對輸入和輸出有太多的類之間的封裝也不是初學者容易理解的。這樣導致學生在初接觸程序設計時陷入繁瑣細節(jié)的學習,無暇深入對程序結(jié)構的理解和學習。
(2)教學案例呆板
在C(或Java)程序設計語言課程中大多使用求解數(shù)學類問題作為例題。很多學生對程序設計的興趣是來自于一些對程序的神秘和好玩,他們希望經(jīng)過學習后能解決一些實際的問題,如繪制玫瑰花、網(wǎng)絡爬蟲等。教材中枯噪的問題求解使大部分學生迅速地喪失了學習興趣,使得他們對程序設計產(chǎn)生了理想和現(xiàn)實差距的困惑[2]。
Python語言目前被廣泛使用,是面向?qū)ο蟮母呒壨ㄓ媚_本編程語言,具有語法簡單,明晰易懂的特點。近年來在各高校開始逐漸普及開始。2017年北京理工大學舉辦了首屆全國高校Python語言與計算生態(tài)教學研討會,掀起了Python的教學和教研熱潮。
隨著以計算思維為切入點的“大學計算機課程改革項目”的開展,一些高校老師在計算思維視域嘗試引入Python程序設計課程。黃靜為非計算機專業(yè)學生開始了Python的計算機基礎課程,有助于提升非計算機專業(yè)學生應用計算機解決問題的能力與水平[3]。王亞萍開展了基于SPOC的翻轉(zhuǎn)課堂的Python程序設計課程,并構建了基于過程的動態(tài)綜合評價方式,為高校計算機程序設計教學提供了一種可參考的實踐摸索[4]。
隨著Python教學實踐的開展,一些各具特色的教學案例和課程教學改革也紛呈出現(xiàn)。嵩天設計了“海龜繪圖作品”和“人物出場統(tǒng)計”教學實踐方案,并展示了在北京理工大學開展教學實踐的部分學生作品[5]。張思楊引入項目案例,以成果導向為指導的教學模式側(cè)重培養(yǎng)學生學習興趣、解決問題能力和計算思維[6]。
以上教學改革或教學實踐的開展為我們提供了藍本,很有借鑒意義。
Turtle庫是Python語言最基礎的圖形繪制函數(shù)庫,它具有如下優(yōu)點:首先,它的圖形繪制概念直觀易懂,模擬一只海龜爬行,將其爬行軌跡動態(tài)生成圖形進行輸出;其次,語法簡單,只要導入Turtle庫后,然后使用Turtle庫提供的函數(shù)表示海龜?shù)倪\動軌跡即可;第三,它需要記憶的基本函數(shù)非常少且容易記住,常用的只需記住約10個的函數(shù)即可(見表1),而且函數(shù)的名字與海龜動作名稱的自然語言一致,易于記憶。
表1 Turtle庫常用函數(shù)
在繪圖時,只要計算好海龜?shù)倪\動軌跡,無需繁瑣的語法,按運動軌跡調(diào)用對應的函數(shù)即可。
我們設計一個簡單的教學案例:繪制一個四邊形,按簡單的計算思維,那就是繪制出4條邊,代碼如下:
import turtle as t
t.setup(400,400,20,20)
t.forward(25)
t.right(90)
t.forward(25)
t.right(90)
t.forward(25)
t.right(90)
t.forward(25)
t.right(90)
在本例中設置圖形窗口位于屏幕左上角(20,20),寬和高均為400像素,海龜先往前爬25個像素,然后順時針旋轉(zhuǎn)900,再前爬25個像素,如此重復4次直到海龜回到原來位置。圖形繪制的效果如圖1。
圖1 繪制4邊形
程序設計結(jié)構是計算機程序設計語言教學中的重點和難點內(nèi)容,結(jié)構化的程序設計僅使用3種基本結(jié)構:順序結(jié)構、選擇結(jié)構和循環(huán)結(jié)構。在Python圖形化的程序設計結(jié)構教學中,使用Turtle庫就可以跳過繁瑣的基礎語法知識,引導學生深入理解程序的三種結(jié)構。在解決具體圖形繪制問題時,學生只要計算出海龜?shù)倪\動軌跡,再通過調(diào)用goto()、penup()、circle()和pendown()等函數(shù)就可以實現(xiàn)圖形的繪制,進一步,通過設置turtle的填充屬性如begin_fill()、pencolor()、end_fill()等函數(shù)就可以為繪制的圖形填充顏色。通過這些函數(shù)可以使繪制的圖形色澤鮮艷、生動,滿足學生的興趣,讓學生直觀理解三種程序結(jié)構[2]。
以案例1為例,分析代碼發(fā)現(xiàn):第3行和第4行重復出現(xiàn)4次,在程序設計中,這樣重復的工作可以使用循環(huán)結(jié)構實現(xiàn),改編后的代碼如下:
t.setup(400,400,20,20)
for i in range(4):
t.forward(25)
t.right(90)
代碼中的range(4)表示計數(shù)4次。通過這個案例可以簡單地把程序結(jié)構從順序結(jié)構過渡到循環(huán)結(jié)構。
繪制一個如圖2的簡筆畫的魚。
圖2 簡筆畫魚
代碼如下所示:
import turtle as t
t.setup(600,500,10,10)
t.fillcolor("yellow")
t.begin_fill()
#畫魚身
t.goto(200,200)
t.goto(200,-200)
t.home()
t.up()
t.goto(200,0)
t.down()
#畫魚尾
t.goto(250,50)
t.goto(250,-50)
t.goto(200,0)
t.up()
t.goto(50,-10)
t.down()
#畫魚眼
t.circle(10)
t.end_fill()
t.done()
通過觀察結(jié)果圖和分析代碼發(fā)現(xiàn),魚身和魚尾都是三角形,再比較對應的代碼8-14行和17-23行,進一步發(fā)現(xiàn)海龜?shù)膭幼魇且粯拥?,僅是一些具體的值不同,那么我們可以把一些相似的動作設計成一個函數(shù)模塊,把動作不同的值設計成函數(shù)的參數(shù),所示的代碼可以改編為函數(shù)實現(xiàn)方式。
import turtle as t
def drawTriAngle(ax, ay, bx, by, px, py):
t.goto(ax,ay)
t.goto(ax,-ay)
t.goto(bx,by)
t.up()
t.goto(px,py)
t.down()
t.setup(600,500,10,10)
t.fillcolor("yellow")
t.begin_fill()
#畫魚身
drawTriAngle(200,200,0,0,200,0)
#畫魚尾
drawTriAngle(250,50,200,0,50,-10)
#畫魚眼
t.circle(10)
t.end_fill()
t.done()
通過本案例的教學,讓學生感受到模塊化的過程,理解函數(shù)的作用,整個程序設計過程沒有繁瑣的語法規(guī)則,重點在問題解的本身。
為提高學生興趣,并進行愛國主義教育,我們還設計了繪制國旗、機器貓、給老師獻花等案例。案例效果圖見圖5。這些教學案例通過數(shù)學計算得到海龜?shù)倪\行軌跡,然后調(diào)用turtle庫函數(shù)實施繪制,語法簡單,案例生動活潑,貼近生活,極大地調(diào)動了學生的積極性,激發(fā)了學生的興趣,讓學生認識到編程是件很好玩的事。特別是在繪制國旗的教學過程中穿插介紹巴西里約熱內(nèi)盧奧運會上懸掛的中國國旗出現(xiàn)每個小五角星水平對著大星的嚴重錯誤。通過這個故事告訴學生在計算位置坐標時,小五角星各有一個尖正對大星中心點,象征圍繞中國共產(chǎn)黨領導下的人民大團結(jié),結(jié)合教學進行愛國主義教育,讓愛國主義教育不再空洞,而是落實在計算只中,效果反響良好。
圖3 綜合設計教學案例
基于Turtle庫簡單的圖形繪制函數(shù),我們在計算機程序設計教學中,一改以往純粹地解決數(shù)學問題作為編程例題和習題的做法,把圖形繪制引入到程序設計教學中,通過教學實踐設計了眾多的教學案例,這些教學案例不要求學生掌握負責的語言語法,把注意力放回問題本身。實踐表明,通過生動鮮明、貼合生活實際的教學案例可以極大激發(fā)學生學習編程的興趣,建立學習的信心,能更好地掌握計算機程序設計中的程序結(jié)構設計和函數(shù)的概念,程序設計能力有很大提升。