彭仁杰
【摘要】高中新課程中程序設計占很大一部分,教學難度大、學生興趣不高是老師普遍的感受。本文嘗試在教學過程中引入游戲化項目,把教學內容揉到游戲的迭代中去。通過一段時間的教學,發現教學效果良好,對學生思維的提升也起到很好的作用。
【關鍵字】游戲化;迭代思維;抽象思維
【基金項目】本文為蘇州市教育科學“十三五”規劃課題(課題編號:192010350)研究成果。
從2020年9月開始,大部分省份的高中信息技術課程開始采用新教材,幾個出版社的教材中都涉及了程序設計,所用語言都是python。筆者和所在區域的老師也積極進行了備課、上課并反思。通過幾個月的教學,結合學生的興趣,發現利用游戲化項目教學能很好地調動學生的學習積極性,教學效果良好。下面,主要以游戲“石頭剪刀布”為項目,談談如何在高中信息技術課中利用游戲化項目進行教學。
一、第一階段:輸出電腦手勢1.0,抽象游戲
在學習程序設計之前,學生接觸的軟件、游戲都是比較具體的界面。學生學習程序設計,尤其是自己試著編寫游戲,遇到的第一個困難就是無法把具體的問題抽象,比如:無法表示“石頭、剪刀、布”三種狀態。教師可以和學生一起探究如何把三種狀態數字化(用0,1,2表示“石頭、剪刀、布”),鍛煉學生的抽象思維,使學生初步形成把實際問題轉換成計算機解決問題的認識。
本階段也可以分幾步進行:1.給電腦和用戶都直接賦值。2.由于電腦的輸入是不確定的,引入隨機函數。3.由于用戶的輸入需要通過鍵盤輸入,引入input函數。通過這幾個環節,學生可以初步了解程序設計的一些簡單概念。
代表性代碼:電腦手勢隨機產生,用戶手勢鍵盤輸入。
import random
computer1=random.randint(0,2)
man=int(input("你要出什么?0表示石頭,1表示剪刀,2表示布"))
print("computer1=",computer1,";man=",man)
二、第二階段:輸出電腦手勢2.0,分支語句初步
當會用數字表達三種狀態后,學生通過測試游戲會提出一些疑問,如:目前用戶輸入任何數字都可以,能否對輸入數據進行有效性判斷?教師順勢引入分支語句的概念。當學生有了分支的概念后,游戲就可以進一步補充更多的功能,如:能否根據用戶輸入的數字,輸出對應的“石頭、剪刀、布”?這涉及單分子、雙分支以及分支語句的嵌套。教師可以先通過流程圖的形式,和學生一起理清思路,然后再介紹python語法,最后讓學生編寫游戲。
代表性代碼:電腦手勢判斷部分代碼。
computer=random.randint(0,2)
man=int(input("你要出什么?0表示石頭,1表示剪刀,2表示布"))
if (0<=man<=2) :
print("電腦輸入的是:",computer)
print("你輸入的是:",man)
else:
print("輸入數據錯誤")
三、第三階段:讓表達更簡單,認識列表
第二階段的判斷,涉及多次的嵌套,學生的感受是很復雜。教師可以和學生一起思考:能否有更簡單的方法來表示?教師可以順勢引入列表的概念。
代表性代碼:
a=["石頭","剪刀","布"]
computer=random.randint(0,2)
man=int(input("你要出什么?0表示石頭,1表示剪刀,2表示布"))
print("電腦輸入的是:",a[computer])
print("你輸入的是:",a[man])
四、第四階段:人機對戰,分支語句的應用
當學會了分支語句、列表以后,學生就可以試著完成人機對戰了。如果讓學生單獨編寫代碼,由于每個人的思維方式不同,代碼會有很多種。教師可以展示學生的代碼,很多同學的代碼會寫很多行,很復雜的嵌套。教師可以通過提問來引導學生梳理邏輯思路。比如:判斷“贏、輸、平局”哪個更容易比較?如何表達?有的學生可能表示為((computer==0 and man==0)or (computer==1 and man==1) or (computer==2 and man==2),其實這些只要man==computer就可以表示了。
代表性代碼:判斷輸贏部分
if (man==computer):
print("平局!")
elif( (computer==0 and man==2)or (computer==1 and man==0) or (computer==2 and man==1)):
print("恭喜你,贏了!")
else:
print("抱歉!你輸了!")
五、第五階段:游戲三局兩勝,循環語句應用
完成上面的游戲后,有學生會提出:本游戲只能判斷一次是否正確,正式的游戲一般是三局兩勝,從而引進循環語句的概念。由于不知道多少次比賽能決定輸贏,所以這次涉及的是while循環,同時需要引導學生理解有計數的概念。通過這個游戲學生對for循環和while循環的適用場合就有了深刻的理解。
代表性代碼:循環統計輸贏部分
while (manwin<2 and computerwin<2):
man=int(input("你要出什么?0表示石頭,1表示剪刀,2表示布"))
computer=random.randint(0,2)
if (computer==0 and man==1) or (computer==1 and man==2) or (computer==2 and man==0):
print ("本局電腦贏了")
computerwin=computerwin+1
if (computer==1 and man==0) or (computer==2 and man==1) or (computer==0 and man==2):
print("本局你贏了")
manwin=manwin+1
if (computer==man):
print("平局")
print("現在比分為 你:電腦",manwin,":",computerwin)
六、游戲化項目在課程教學中的意義
新版的《普通高中信息技術課程標準修訂稿》明確指出,計算思維是信息技術學科核心素養之一。迭代思維、抽象化思維都是計算思維的重要組成部分,通過游戲化項目能很好地鍛煉學生這方面的思維能力。
(一)鍛煉學生的迭代思維
在程序設計中,教師經常會利用“出租車車費”等問題進行教學,但是學生學習積極性不高。讓學生編寫游戲,有一定難度。對于這個矛盾,教師可以引入游戲化項目來構建整體教學結構,把游戲設計成幾個階段:初步解決小問題—不斷優化—不斷提出新的問題—學習新的知識解決問題。不斷迭代,每個階段都可以創新,不同學生在不同階段獲得成功體驗。讓學生體驗程序設計的樂趣,提升迭代思維的能力。高中信息技術課程旨在全面提升學生的信息素養,迭代思維能夠促使學生根據解決問題的需要,自覺、主動地不斷尋求更為恰當的方式來獲取與處理信息[1]。
(二)鍛煉學生的抽象思維
在科學方法論中,抽象思維是對同類事物去除其現象的次要方面,抽取其共同的主要方面,從個別中把握一般,從現象中把握本質的認知過程和思維方法[2]。程序設計的目的就是利用計算機解決實際生活問題,首先要做的就是將實際問題抽象為計算機可以識別和解決的問題,需要學生有較強的抽象思維能力。通過游戲化項目,可以引導學生把具體問題抽象化。教師可以和學生一起討論并明確游戲的需求,提取問題的主要特征,忽略沒有幫助和影響的細節,然后再抽象成適合在計算機中表示的數據結構和形式化的數學模型,最后把問題的數學模型或處理需求轉化為有效的算法,并編碼實現。
總之,新課程要求我們進一步關注學生思維能力的提高,信息技術教師必須更新教學思路,多思考,多實踐,才能把信息技術核心素養落到實處。
【參考文獻】
[1] 陳軍輝.迭代思維引導探究走向深入[J].中國教育報,2018.
[2] 鐘柏昌,李藝. 計算思維的科學涵義與社會價值解析[J]. 江漢學術,2016(02).