









摘要:本文針對turtle繪圖一堂課的實踐教學,以任務為驅動,全面覆蓋turtle知識點,以循序漸進方式將內容綜合融入其中,結合線上線下混合式課堂,引導學生找到解決問題的方法,極大地提高了學生的編程興趣,培養了學生的創新思維。
關鍵詞:任務驅動;循序漸進;線上線下混合課堂;turtle庫
中圖分類號:G434" 文獻標識碼:A" 論文編號:1674-2117(2024)08-0071-05
引言
Python程序設計語言因具有“開源、共享、通用”等特征,擁有豐富多元的計算生態,而成為許多高校非計算機專業首選的程序設計語言課程。[1-2]筆者根據教學實踐提出了“課前1+課中2+課后4”的線上線下混合教學模式,即:課前教師對教學內容及任務布置1學時的自主預習,用來初步了解教學內容;課中教師授課2學時;課后學生至少花4學時來鞏固與消化課堂內容,充足的時間投入是學好該課程的必要條件。同時,筆者采取循序漸進的教學方式,通過環環相扣,由淺入深,引導學生不斷思考,解決問題,最后形成一個完整的知識構架。這種教學方式能集中學生注意力,讓學生在問題解決的過程中獲得學習成就感,激發學習興趣,培養學生使用程序解決問題的能力,同時提升創新意識和創新能力。
基于循序漸進方式的Python-turtle庫教學設計
1.教學內容
turtle是Python內置標準庫,turtle海龜繪圖體系是入門級的圖形繪制函數庫。其原理是利用一個小海龜,從坐標系原點(0,0)位置開始,根據一組函數指令的控制,在平面坐標系中爬行,由爬行軌跡構建圖形。turtle庫教學知識點包括認識turtle庫、畫布設置、畫筆控制、運動控制、方向控制和圖形效果等六個方面。
2.教學模式
混合式課堂的教學過程分為課前、課中、課后三個部分。課前,教師以知識導圖為提綱,上傳基礎知識講解視頻,并設置明確的任務導入,讓學生帶著任務去預習。課中,教師主導課堂,以循序漸進方式,從最初的海龜動起來到海龜行走自如,設計教學過程和教學情境,通過提問交流、小組討論、學生演示等方式進行課堂內化。課后,教師根據學生的學習情況分析和總結,并通過網絡教學平臺布置具有拓展性的任務,實現知識的提高與擴展;通過教學反饋與評價,不斷改進,提高質量與教學效率,利用網絡平臺和雨課堂,完成翻轉課堂模式的混合式教學模式。教學策略與流程如下頁圖1所示。
3.基于任務驅動的循序漸進教學實施
任務一:海龜動起來(繪制正方形)
①任務要求:讓海龜動起來,從原點處向東出發,每向前爬行100像素后左轉90°,回到起點停止。
②任務目標:初識turtle圖形繪制;了解畫布;重點熟悉turtle繪圖坐標系統;感受海龜爬行軌跡。
③任務分析:turtle繪圖有絕對角度坐標和海龜角度坐標。絕對角度坐標是以海龜為坐標原點建立坐標系,分為四個象限,用(x,y)來表示具體位置,如圖2(a)所示,使用turtle.goto(x,y)語句海龜移動到絕對位置(x,y)點處;海龜角度坐標是以海龜當前點為起點,分前后左右,如圖2(b)所示,海龜使用turtle.forward(d)、turtle.left(angle)、turtle.right(angle)等方法做相對運動。
具體實現以順序結構逐條執行語句,每向前爬行100像素,向左轉90°,讓學生先熟悉turtle繪圖畫布及坐標系統,掌握畫筆運動命令,以直觀的思維方式感受海龜的爬行過程,然后繪制出正方形。參考代碼及其運行效果如圖3所示。
任務二:繪制以原點為中心點的正方形
①任務要求:繪制以原點為中心點的正方形,正方形各條邊分別對應紅、綠、藍和紫色。
②任務目標:重點掌握畫筆起落;改進任務一中代碼冗余;復習與鞏固列表或元組的應用。
③任務分析:任務二是對任務一的改進與提高,從任務一中的代碼可以看出,其中語句t.fd(100);t.left(90)重復四次,引導學生使用循環結構;若要使每一條線的畫筆顏色發生變化,就既要使用循環來控制畫線,又要讓畫線顏色變化,由此引導列表知識的引入。列表是有序序列,可以通過索引號來訪問列表中的元素。因此,可以使用列表來存儲顏色,每繪制一條邊從列表中通過索引號取得對應顏色;任務中要求正方形中心點在原點,由此引入penup()或pendown()方法,實現在畫筆的抬筆、落筆時的運動控制。任務二參考代碼及運行效果如下頁圖4所示。
任務三:繪制紅色框線綠色填充的正方形
①任務要求:繪制紅色框線綠色填充的正方形(中心點位置不作要求)。
②任務目標:掌握畫筆顏色控制命令pencolor()、fillcolor()、begin_fill()、end_fill()和color();掌握畫筆顏色的RGB體系。
③任務分析:顯示屏顯示的顏色是R(紅)、G(綠)、B(藍)互相組合形成的,每種顏色取值范圍是0~255的整數或0~1的小數,在Python中默認是采用0~1的小數來表示RGB每種顏色的值。R(紅)、G(綠)、B(藍)數值大小不同成份的組合構成五顏六色,turtle繪圖中的RGB色彩體系如右表所示。
pencolor(colorstr)和fillcolor(colorstr)分別對應畫筆顏色和填充顏色,也可以使用color(colorstr1,colorstr2)進行設置,其中,函數中的參數colorstr(或colorstr1、colorstr2)可以直接使用顏色字符串常量,如turtle.pencolor(\"green\")或者RGB數值三元組,如turtle.pencolor((0,1,0))或者turtle.pencolor(0,1,0)。在使用填充時有begin_fill()和end_fill()兩個相關方法,類似是否填充的開關。任務三參考代碼及運行效果如圖5所示。
任務四:繪制正方形陣列
①任務要求:以原點為中心點,繪制n個正方形陣列,由內到外第1個正方形邊長為20像素,第2個邊長為40像素,第3個邊長為60,依次類推,下一個正方形邊長在前一個正方形邊長基礎上增加20像素。
②任務目標:重點是函數的創建與調用;循環語句與range()函數;進一步強化畫筆起落控制。
③任務分析:繪制多個以原點為中心的正方形,構成正方形陣列。因此,每繪制完一個正方形都要抬筆,將海龜移動到落筆繪制起點位置,起點位置可以在y=x直線上;引入函數的使用、自定義函數paint()、函數的功能繪制一個正方形;繪制多個正方形,使用循環,因此,自然引入計數循環range()函數。自定義函數的引入,使雙重循環結構程序更簡潔,結構更清晰可讀、可理解,在前三個任務的基礎上,在知識的綜合應用上再遞進一層次。任務四參考代碼及運行效果如下頁圖6所示。
任務五:繪制五彩正方形陣列
①任務要求:在任務四的基礎上修改,繪制五彩正方形陣列,即不同顏色的正方形。
②任務目標:熟悉random庫的使用;熟悉顏色模式與畫筆顏色pencolor()參數設置。
③任務分析:任務五與任務四的區別只是畫筆顏色的變化,在任務二中是使用列表來存放預置顏色,但這里顏色未明確。turtle繪圖顏色體系除了使用字符常量來表示,也可以使用RGB模式,其中RGB模式下其參數是在一定范圍內的數據,由此,引入random庫,random庫中的randint()方法隨機產生[a,b]范圍內整數,random()方法隨機產生[0,1)范圍內小數。具體使用整數形式還是0~1·內小數,與turtle.colormode()保持一致即可,系統默認為RGB體系為1。通過任務練習,讓學生理解屬性之間的相互約束與協調關系。任務五參考代碼及運行效果如圖7所示。
任務六:繪制愛心
①任務要求:繪制愛心形狀。
②任務目標:熟悉circle()方法的使用;培養分析和創新能力。
③任務分析:
方法一,從圖形效果分析,turtle中沒有直接對應的方法實現愛心圖形的繪制,通過拆解與分析,愛心圖形可以拆分為兩個半圓和兩條直線的組成,填充顏色即可。半圓的繪制最直接的是使用circle()方法,根據特殊到一般的方法,首先可以選擇比較特例的參數來繪制,即愛心由一個正方形和兩個半圓構成。海龜在左轉135°后向前進2R像素(R為圓的半徑),然后以R為半徑順時針畫半圓,在畫右半圓前海龜須左轉90°,在繪制好右半圓后,再向前進2R像素,回到起點。
方法二,圓弧的繪制除了用circle()外,還可以使用fd()方法繪制,在前進中逐步地轉角度,繪制效果就是曲線。使用循環語句,循環的次數與每次轉角相關。如果循環180次,則每次轉角1°,繪制出半圓曲線,若每次轉角2°,則繪制出看似圓的曲線。這種方法的難點是海龜在直行多少像素后再開始繪制半圓曲線。示例中給出的參考代碼計算公式為π*R=180,推得d=180/π*2,參考代碼如上頁圖8所示。
任務七:繪制分形樹
①任務要求:應用遞歸思想繪制分形樹。
②任務目標:深入理解遞歸函數;培養程序設計思維。
③任務分析:遞歸可以把一個復雜問題轉化為一個與原問題相似的規模較小的問題,通過自己調用自己,找到最終解決這個問題的條件,這個條件即為遞歸的出口,達到條件返回。遞歸函數是學生在學習過程中難以理解及運用的難點之處,通過本任務的實踐練習,理解遞歸函數的原理與使用方法。圖9為深度為3的分形樹,分析每個分支節點處,發現每個分支具有相同的結構,每右轉角度?后,繪制一個枝干,枝干逐步變短,設定最后一個枝干的長度為遞歸出口。因此,使用遞歸思想繪制,參考代碼如圖10所示。
4.課后擴展
課后作業是擴展學習的途徑,學生根據課堂所學,發揮創造力和想象力,編程創作一幅有新意的畫面。通過給學生布置這種開放性的任務,啟發學生理解并發展與其專業或者興趣相關的其他領域的新想法和新觀念,培養學生的創新思維和能力。
結語
實踐證明,相對數學方法的編程,圖形案例教學通過循序漸進的方式,以解決具體問題為導向,更能吸引學生的注意力,使其對編程產生興趣,建立編程學習的信心。
參考文獻:
[1]嵩天,黃天羽,禮欣.面向計算生態的Python語言入門課程教學方案[J].計算機教育,2017(08):7-12.
[2]嵩天,黃天羽,禮欣.Python語言:程序設計課程教學改革的理想選擇[J].中國大學教學,2016(02):42-47.
[3]張莉,金瑩,張潔.多樣化可擴展的Python教學體系探索與實踐[J],計算機教育,2017(8):18-22.
作者簡介:尹建新,女,副教授,研究方向為智能圖像識別、機器視覺。
基金項目:浙江省“十四五”教學改革項目(jg20220344);全國高等院校計算機基礎教育研究會計算機基礎教育教學研究項目(2023-AFCEC-116);2023教育部產學研合作項目(230701416280935)。