摘" 要" 信息科技新課標強調教學應凸顯“學主教從、以學定教、先學后教”,把項目整合于課堂教學中,重構教學組織方式。項目式教學符合學習的本質,即發現問題、解決問題。新課標要求教師在整體梳理教學內容的基礎上,以階段性教學內容為依托,設計教學推進的路徑,在項目式教學的過程中合理滲透信息科技學科核心素養。筆者在Python循環結構章節開展了項目式教學嘗試,結合Turtle庫繪圖功能,讓學生從模仿繪制到創作設計,并在此過程中深入理解循環體的意義,熟練使用循環結構編寫代碼,并通過迭代優化調試完成項目實踐。實踐表明項目式教學能夠充分調動學生學習自主性,有利于其計算思維核心素養的培養。
關鍵詞" 信息科技;項目式教學;Python;循環結構
中圖分類號:G633.67" " 文獻標識碼:B
文章編號:1671-489X(2024)09-0-04
0" 引言
信息科技新課標強調對學生學科核心素養的培養[1],要求以學科大概念為核心,呈現結構化的課程內容,創設項目式學習情境,由傳統的知識技能點教學轉為對學生核心素養的培養提升。中學程序設計部分的教學需要培養學生的計算思維能力,而學生計算思維的培養不應局限于語法、程序結構、算法的知識點教學,而應讓學生在項目式問題解決中鍛煉其計算思維。這一培養要求與項目式教學指向學科核心素養的目標相一致,因此,筆者嘗試在Python循環結構章節開展項目式教學實踐。
在傳統的Python程序循環章節的教學中,教師往往從使用循環結構的必要性入手:當需要計算機重復執行某一項操作時,可使用循環結構。進而講解循環結構的基本框架與循環體語法結構,引導學生掌握單層循環體的寫法,然后學習循環體的嵌套,用習題進行練習與強化。這樣的教學模式對于學生分析、解決實際問題的能力并沒有很大的幫助,并沒有從知識點的學習轉向思維能力的提升。
基于項目的學習(PBL)以問題為導向,通過教師創設的基于環境情境的任務激發學生學習的積極性,在學習的過程中,以學生為中心,知識點技能的學習也圍繞問題解決展開,學生需在問題解決中靈活運用學習到的新知識技能,一個好的項目設計應該是層層遞進的,同時能夠給予學生充分自主發揮探究的空間[2-3]。
本次項目式教學內容圍繞Turtle繪圖展開,通過引導學生繪制一個個從簡單到復雜的圖案理解并學會運用循環結構。這一個個圖案是學習支架,將任務分解為由易到難的微項目既能夠將學習內容貫穿其中,又能夠控制難度的合理遞增,學生在完成一個個微項目的過程中能夠獲取成就感與進一步探究的動力。
1" 項目式教學過程
子項目一:繪制三角形
在子項目一中,教師講解Python中Turtle庫的使用,介紹如何通過參數控制畫筆的速度、方向、前進距離,學生在習得這些Turtle基本函數后可繪制出三角形、正方形等基本圖形。以三角形為例,代碼如下:
import turtle
t=turtle.Turtle()
t.speed(10)
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
繪制三角形的核心代碼為t.forward(100),t.left(120)兩句,即向前行走100步之后左轉120°,并且將此操作重復執行三遍。可以使用for循環結構讓代碼更加精簡,將上一段代碼改為:
import turtle
t=turtle.Turtle()
t.speed(10)
for i in range(3):
t.forward(100)
t.left(120)
教師講解range()函數的用法,解釋for i in range(3):語句的意義。學生在此基礎上,可以使用循環結構自行繪制正方形、五邊形等其他基本圖形,并且在嘗試過程中體會旋轉角度的變化。
子項目二:繪制“十字”
為了鞏固學生對循環結構的掌握,教師給出子項目二:繪制“十字”任務(圖1),引導學生對此任務進行分析:哪個部分是重復執行的?實現這一部分的代碼是?如何重復實現?此任務由學生自行小組討論并嘗試編寫代碼進行調試。
實現代碼有多種寫法,其區別在于將哪一部分作為循環執行的對象,參考代碼如下:
import turtle
t=turtle.Turtle()
t.speed(10)
for i in range(4):
t.left(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
子項目三:繪制花朵
教師給出一系列可繪制的花朵示例(圖2),學生可嘗試繪制出如圖所示的模型,也可以自行創作,使用循環結構繪制出內含重復執行模塊的創作作品。圖2參考代碼如下:
花朵1
import turtle
t=turtle.Turtle()
t.speed(10)
for i in range(5):
t.left(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.left(18)
花朵2
import turtle
t=turtle.Turtle()
t.speed(10)
for i in range(16):
t.left(90)
t.forward(30)
t.right(90)
t.forward(30)
t.right(90)
t.forward(30)
t.left(67.6)
花朵3
import turtle
t=turtle.Turtle()
t.speed(20)
for i in range(16):
t.circle(50)
t.right(22.5)
t.forward(40)
在這個子項目中,充分體現了學生的主觀能動性,發揮了學生的主體創造力,激發出學生的學習興趣,讓學生在自我創作的過程中深化對于循環結構的理解,對何時使用循環結構,怎么使用循環結構有了更加切身的體會,由被動完成任務轉向主動生成需求并實現。并且在此過程中,鼓勵學生展示自己的作品,在相互交流中會產生新的創作火花,比如圖3就是學生創作中的優秀示例,其實現代碼如下:
import turtle
t=turtle.Turtle()
t.speed(20)
for i in range(18):
for j in range(3):
t.forward(60)
t.left(120)
t.forward(60)
t.right(20)
在子項目三中,關于“旋轉角度”如何確定是一個可以深入探究的問題,筆者在教學的過程中觀察到,有一部分學生會采用多次嘗試的方法確定旋轉角度,然而這是一個可以通過計算得到準確答案的數據,所以在代碼展示環節,教師可以提問:這一個角度是如何計算得到的?所需知識為初中平面幾何角的度數計算相關內容。掌握旋轉角度計算方法也是為后續子項目的完成打下基礎,學生在面對后續復雜圖案繪制時,可以對旋轉角度的確定做到心中有數,而不是盲目嘗試。
子項目四:繪制迷宮
在傳統循環結構教學過程中,學生在掌握了單層循環體結構后,教師會進行雙層多層循環結構體的教學,學生對于多層循環體的功能與意義缺乏切身體會。筆者在此項目式教學過程中,嘗試利用搭建子項目的方式讓學生理解引入多層循環體的必要性。教師可提出子項目需求:繪制如圖4所示的迷宮,讓學生自行分析并嘗試編寫代碼。
學生在分析項目需求嘗試編寫代碼的過程中,教師可以搭建問題解決支架引導學生進行思考,比如在繪制迷宮的過程中哪些部分是重復執行的?如何實現正方形邊長遞增的需求?學生可嘗試從繪制一個正方形到繪制兩個,再到繪制多個。在項目式學習的過程中,需要充分發揮學生的主觀能動性,但同時不可走向學生自學的另一個極端,教師必須在項目式教學的過程中給予必要的學習支架,在學生知識出現空缺時及時進行新知識點的講解,從學生內需出發進行講授,往往會收獲更好的教學效果。
在子項目四中,可以分析出不僅每一個正方形的繪制有重復操作部分,繪制多個正方形也是一種重復操作,涉及循環的嵌套,代碼如下:
import turtle
t=turtle.Turtle()
t.speed(20)
l=10
for i in range(40):
for j in range(2):
t.forward(l)
t.right(90)
l+=8
這段代碼中內層循環完成的是繪制一個正方形的功能,外層循環重復執行40次,繪制了40個正方形。變量l用于控制正方形邊長,外層正方形比內層正方形邊長加8,逐層遞增。教師需要詳細講解代碼運行的過程,可以通過填寫表1的方式幫助學生更好地理解變量i和j的變化過程。
在完成了基礎版迷宮后,教師可讓學生嘗試在修改現有代碼的基礎上實現如圖5所示的效果。
學生通過觀察能夠發現,在現有代碼的基礎上,每完成一次正方形繪制后旋轉一定角度即可實現如圖5所示的螺旋效果,代碼如下:
import turtle
t=turtle.Turtle()
t.speed(20)
l=10
for i in range(90):
for j in range(2):
t.forward(l)
t.right(90)
l+=3
t.right(2)
子項目五:體會螺旋曲線之美
數學中有各式各樣的曲線,螺旋曲線便是其中一種,其優美的造型充分展現了數學之美。在子項目五中,教師展示若干由Python繪制出的螺旋曲線(圖6),學生可選擇繪制其中的幾種,也可自行編寫呈現繪制作品。
螺旋線1
import turtle
t=turtle.Turtle()
t.speed(100)
l=30
for i in range(72):
for j in range(4):
t.forward(l)
t.right(90)
t.right(5)
l+=3
螺旋線2
import turtle
t=turtle.Turtle()
t.speed(20)
l=10
for i in range(90):
for j in range(2):
t.forward(l)
t.right(92)
l+=3
這個子項目充分給予學生自由創作的空間,學生可手繪出初步的意向圖稿,然后在代碼編寫的過程中不斷調整參數,繪制出想要的效果。
在進行上述子項目的過程中,教師應要求學生保存好自己的所有代碼,甚至是代碼的迭代修正過程都應該保留下來。在項目小結階段,學生可以以小組為單位,總結展示代碼及繪制的圖案。隨著學習內容的深入和代碼編寫熟練程度的提高,學生可能會對自己先前的代碼有新的認識,并再次進行更新迭代,這便體現了程序設計的完整流程,從分析問題、設計算法到編寫代碼,最后進行迭代調試。小組成員之間也可進行交流,閱讀其他同學的代碼并提出改進建議也是一種鍛煉計算思維核心素養的方法。
教師在進行項目總結評價時,應注重過程性評價,不應僅從學生繪制的成品出發去評分,在學生總結時,需要著重引導學生重述并體會代碼調試、反思與改進的過程,在此過程中考查學生對于知識點的理解深入程度與靈活運用水平,從而更加全面地評價學生計算思維水平,鼓勵學生創造性的思維生成與自我嘗試,對于能夠跳脫出教師給出的模板進行獨立性創作的,尤其需要提出表揚。
2" 項目教學反思
2019年,發表于美國計算機協會會刊的《從計算思維到計算行動》一文提出了計算行動概念,其認為在現有的K-12計算機編程教育中,將重點放在基本概念和流程的理解上。國內中學信息科技課程的教學亦是如此,以教師講解灌輸為主,并輔以大量的編程練習題,學生不禁會思考:如何運用編程知識改變生活。
為了更好地在信息科技課程教學中貫徹計算思維行動概念,筆者嘗試著在循環結構部分的教學中融入項目式教學法,在該項目教學中能夠充分體現學生的計算身份,對學生進行數字賦能[4],學生在項目過程中,有自主權設計并描述他們的作品,而不是尋找原先預設的正確答案,學生能夠看到其作品產生、不斷迭代及進一步擴展的可能性。在項目式教學實踐中將子項目和任務作為主線,將知識點講解與技能訓練暗藏其中,實現了任務驅動下的自主學習,學生主動分析問題、拆解問題、用計算思維的方式解決問題,達到提升學生學科核心素養的目的。筆者發現學生在項目式教學過程中表現出非常高的學習熱情,特別是自主創造環節,學生能夠創造出各式各樣極富創造力的作品。
3" 參考文獻
[1]中華人民共和國教育部.普通高中信息科技課程標準(2017年版)[S].北京:人民教育出版社,2018.
[2]張文蘭,劉照陽.信息技術賦能項目式學習的有效路徑[J].中小學數字化教學,2023(2):5-8.
[3]張文蘭,胡姣.項目式學習的學習作用發生了嗎?:基于46項實驗與準實驗研究的元分析[J].電化教育研究,2019,40(2):95-104.
[4]呂紅專.面向真實場景的編程項目式教學實踐與思考[J].中國信息技術教育,2022(24):59-61.
作者簡介:于露,中學一級教師。