


【摘 要】本文以“枚舉算法”教學案例為例,開展了指向計算思維培養(yǎng)的高中Python編程教學實踐。依托情境化推理游戲引入,以層層遞進的活動和問題鏈,拓展了學科思維視角,培養(yǎng)了學生的計算思維。
【關鍵詞】計算思維;高中信息技術;Python編程;教學實踐
【中圖分類號】G434 【文獻標識碼】A
【論文編號】1671-7384(2022)08-060-04
案例背景
《普通高中信息技術課程標準(2017年版)》的頒布實施與新教材的使用,使普通高中信息技術教學由傳統(tǒng)的注重技能實操轉向更加強調學生計算思維等核心素養(yǎng)的培養(yǎng)。計算思維是指學生運用計算機科學領域的思想方法,在形成問題解決方案的過程中產生的一系列思維活動,已經成為高中生必備的基本思維能力和素養(yǎng)。同時,被賦予學生計算思維培養(yǎng)重任的Python語言進入高中課堂。Python語言具有語法簡單、代碼開源、類庫豐富、容易入門等特點,更加注重解決問題的算法實現(xiàn)和思維表達,在編程教學實踐中有利于培養(yǎng)學生的計算思維。本文以教育科學出版社(2019年版)的《數(shù)據(jù)與計算》第四單元“算法及其特征”中的“枚舉算法”為例,從創(chuàng)設情境、新知學習、歸納梳理、拓展提升、遷移應用五方面分析指向學生計算思維培養(yǎng)的設計策略。
案例描述
1.創(chuàng)設情境,引出枚舉
新課標倡導基于真實情境開展教學,通過創(chuàng)設教學情境,借助問題驅動,激發(fā)學生的學習興趣,從而提高課堂效率。
活動1:誰是冠軍
問題描述:這次面試的冠軍在A、B、C、D四位同學中。A說:“不是我?!盉說:“是C。”C說:“是D?!盌說:“C說的不對。”其中三個人說的是真話,一個人說的是假話,你能判斷出到底誰是冠軍嗎?
問題分析:首先,假設A是冠軍,則A假,B假,C假,D真,此假設不成立;其次,假設B是冠軍,則A真,B假,C假,D真,此假設也不成立;再次,假設C是冠軍,則A真,B真,C假,D真,此假設成立;最后,假設D是冠軍,則A真,B假,C真,D假,此假設也不成立。故得出C是冠軍。
小結:按照問題本身的性質,一一列舉出該問題所有可能的解,然后根據(jù)已知條件對所有可能的解逐個進行驗證,從中找出符合要求的正確的解,這種解決問題的方法,我們稱之為枚舉法。
提問:請列舉枚舉法解決問題的事例?
設計意圖:借助推理游戲引入課堂教學,活躍課堂氣氛,迅速集中學生的注意力。在問題解決中,自然引出本課題—— 枚舉法。通過追問枚舉算法在生活中的應用(比如找鑰匙、自行車補胎等),引入后續(xù)的教學。
2.新知學習,初識枚舉
通過“誰是冠軍”活動,讓學生對于枚舉算法思想有初步的4MWRE6NQ9hIE+sCIVHjf+g65iHaoXBhrJKcbdQASxZI=認識,引出尋找“水仙花數(shù)”活動。水仙花數(shù)的查找,非常適合使用枚舉法,然后過渡到通過Python語言實現(xiàn)枚舉算法,體現(xiàn)計算思維。
活動2:尋找“水仙花數(shù)”
問題描述:“水仙花數(shù)”是指一個三位數(shù)(正整數(shù)),其各位上的數(shù)字的立方和等于該數(shù)本身,如:153=13+ 53 + 33,則153是一個“水仙花數(shù)”。要求:找出所有“水仙花數(shù)”。
問題分析:
(1)枚舉算法分析,根據(jù)問題描述如下。
①所有可能的解是什么(三位數(shù))?可能有哪些數(shù)(100~999)?
②逐一驗證的條件是什么?(水仙花數(shù)特征)
(2)代碼實現(xiàn)分析。
①枚舉范圍的代碼實現(xiàn)
如何枚舉所有三位數(shù)?運用什么代碼實現(xiàn)(range函數(shù))?從100到999逐個驗證,需要重復檢驗900次,這種重復執(zhí)行的過程通過什么語法結構(循環(huán))來實現(xiàn)?
②枚舉驗證條件的代碼實現(xiàn)
各位上數(shù)字的立方和是否等于該數(shù)本身,分支結構(if語句)。
通過上述分析,可得枚舉法解決水仙花數(shù)問題的代碼如下。
for n in range(100,1000): #枚舉所有三位數(shù)
gw=n%10 #提取個位數(shù)
sw=n//10%10 #提取十位數(shù)
bw=n//100 #提取百位數(shù)
if n==gw**3+sw**3+bw**3: #驗證條件
print(n,"是水仙花數(shù)")
活動3:破解“QQ密碼”
問題描述:因為一段時間沒上QQ,小明把密碼忘了。他記得密碼是5位數(shù)字,因為自己是8月1日出生,而他媽媽的生日是9月1日,爸爸的生日是10月4日,所以還記得密碼是81、91和104的公倍數(shù)。你能設計一個程序,幫他找回密碼嗎?
問題分析:
(1)枚舉對象?(2)枚舉范圍?(3)驗證條件?
參考代碼:
for n in range(10000,100000):
if n%81==0 and n%91==0 and n%104==0:
print("QQ密碼是",n)
設計意圖:使用尋找“水仙花數(shù)”作為案例講解,算法闡述簡單且學生容易理解。將程序代碼直接展示給學生,讓學生理解并運行程序,體驗枚舉法解決問題過程。通過尋找“水仙花數(shù)”程序的學習后,再給出一個與生活密切聯(lián)系的破解“QQ密碼”簡單實例讓學生模仿,能迅速調動學生探索的欲望,強化對于枚舉算法的理解,讓學生在模仿中構建Python語言枚舉法解決問題的模型。
3.舉一反三,理解枚舉
通過上述幾個活動,總結出Python語言枚舉算法解決問題的程序結構,如圖1所示。
小結:枚舉法解決問題的方法。
(1)三要素:枚舉對象、枚舉范圍和驗證條件。
(2)算法特征:一一列舉,逐個驗證。
(3)程序結構:循環(huán)語句嵌套分支結構。通過循環(huán)一一列舉該問題所有可能的解,在循環(huán)內逐一判斷該解是否是問題真正的解,若是,則采用,否則進入下一輪枚舉。
設計意圖:在前兩個活動實踐的基礎上,給出枚舉法解決問題的方法,對學生已經構建好的模型框架進一步梳理,幫助學生形成枚舉法解決問題的思想和方法。
4.拓展提升,應用枚舉
活動4:推斷“票據(jù)編號”
問題描述:最近警方打掉一個制售假發(fā)票的犯罪團伙,并查獲制造發(fā)票用的印刷模版,但是由于遭到破壞,它的千位和十位的數(shù)字已經模糊不清,如圖2所示。另據(jù)線報,了解到這批五位數(shù)的票據(jù)編號能被23整除。請幫助警方推斷出票據(jù)所有可能的編號。
問題分析:
(1)枚舉對象?
(2)枚舉范圍?如何實現(xiàn)多對象枚舉?(循環(huán)嵌套)
(3)驗證條件?(合成新的五位數(shù):1■7■2,能否被23整除)
參考代碼:
for i in range(0,10): #千位數(shù)枚舉范圍
for j in range(0,10): #十位數(shù)枚舉范圍
n=10702+i*1000+j*10 #生成新五位數(shù)
if n%23==0: #驗證條件
print("票據(jù)編號為:",n)
設計意圖:通過前面案例的學習,學生對于單一對象枚舉已沒有問題。這里設計了雙重枚舉對象,一方面是對前面學習內容的拓展提升,也是為下一個多對象枚舉活動做鋪墊。通過for循環(huán)嵌套的引入,讓學生掌握多對象枚舉的算法編程結構。
活動5:求解“百雞百錢”
問題描述:我國古代數(shù)學家張丘建在《算經》一書中提出了一個數(shù)學問題:公雞5文錢一只,母雞3文錢一只,小雞3只1文錢。現(xiàn)在用100文錢買100只雞,問公雞、母雞、小雞各多少只?
問題分析:
算法方案(1):枚舉對象有幾個,枚舉范圍、枚舉條件是什么,如何實現(xiàn)?
其代碼如下:
for gj in range(1,101): #公雞枚舉范圍
for mj in range(1,101): #母雞枚舉范圍
for xj in range(1,101): #小雞枚舉范圍
if gj+mj+xj==100 and gj*5+mj*3+xj/3==100: #驗證條件
print("公雞數(shù):",gj,"母雞數(shù):",mj,"小雞數(shù):",xj)
思考:上述代碼中,一共會枚舉出多少種可能的組合?是否可以減少枚舉次數(shù)?
算法方案(2):方案1僅根據(jù)公雞、母雞、小雞的只數(shù)進行了枚舉范圍的設定,如果再結合價格,則可有效縮小枚舉的范圍,公雞的上限縮小為20,母雞的上限縮小為33,小雞的上限仍為100。
其代碼如下:
for gj in range(1,21): #公雞枚舉范圍
for mj in range(1,34): #母雞枚舉范圍
for xj in range(1,101): #小雞枚舉范圍
if gj+mj+xj==100 and gj*5+mj*3+xj/3==100: #驗證條件
print("公雞數(shù):",gj,"母雞數(shù):",mj,"小雞數(shù):",xj)
思考:在上述代碼中,一共會枚舉出多少種可能的組合?能不能想辦法再減少枚舉的次數(shù)?
算法方案(3):方案(1)和方案(2)都是三個枚舉對象,枚舉次數(shù)是三個枚舉對象可能取值數(shù)之積。為了有效減少枚舉次數(shù),方案(2)已經嘗試在方案(1)的基礎上盡可能地縮小了枚舉范圍,要想進一步減少枚舉次數(shù),只能考慮是否可以通過已知條件減少枚舉對象了。當公雞、母雞的只數(shù)都枚舉出來后,小雞的只數(shù)就可以表示為“100-gj-mj”了,沒有必要再對其進行枚舉了。
其代碼如下:
for gj in range(1,21): #公雞枚舉范圍
for mj in range(1,34): #母雞枚舉范圍
xj=100-gj-mj
if gj*5+mj*3+xj/3==100: #驗證條件
print("公雞數(shù):",gj,"母雞數(shù):",mj,"小雞數(shù):",xj)
小結:通過對比,我們認識到同一個問題可以從不同的角度思考實現(xiàn)問題求解。枚舉算法雖然簡單,但要注意優(yōu)化枚舉層數(shù)和盡可能縮小枚舉的范圍,以提高程序的運行效率。
設計意圖:經過前面的活動,學生基本掌握了枚舉法解決問題的方法。通過經典數(shù)學題“百雞百錢”案例,讓學生獨立編寫完整程序鞏固前面所學知識。同時,通過比較三種代碼方案,引出算法優(yōu)化的思想,讓學生體會算法優(yōu)化必要性,培養(yǎng)學生從多角度分析問題、解決問題的能力,提升計算思維品質。
5.知識梳理,遷移應用
枚舉法算法淺顯易懂、易于理解,且計算機的高速運算能力保證了枚舉法的可行性,因此在解決實際問題時應用廣泛。枚舉算法總結思維導圖如圖3所示。枚舉法的優(yōu)點也正隱含了它的缺點,使用枚舉時,還要從時間復雜度和空間復雜度綜合考慮算法的效率,實現(xiàn)算法方案的最優(yōu)化。
拓展提問:為什么銀行取款密碼設定次數(shù)限制?如何提高密碼的安全性?
設計意圖:總結枚舉算法的思想,強化枚舉算法解決問題的思路和程序模型。通過交流密碼設置安全性問題,拓展遷移枚舉算法的更多應用,幫助學生增強信息安全意識,樹立正確的信息社會價值觀和責任感。
教學反思
1.明晰課標要求,把準案例設計目標
根據(jù)新課標中對于算法教學的建議,通過枚舉法的學習要讓學生能夠從生活實例出發(fā),概述枚舉算法的概念與特征,理解枚舉算法的基本思想,運用恰當?shù)拿枋龇椒ê涂刂平Y構實現(xiàn)枚舉算法。本案例就是通過貫穿由淺入深的活動實踐,讓學生在一個個活動中解決實際問題,體驗使用Python語言實現(xiàn)枚舉法程序設計的方法(循環(huán)嵌套分支),感受算法效率的重要性,增強運用算法思想解決實際問題的能力,培養(yǎng)思維品質。
2.分析學習內容,開展有效活動設計
面向計算思維的培養(yǎng),課標中強調:“計算思維作為一種思維方式,需要在解決問題的過程中不斷經歷分析思考、實踐求證、反饋調適而逐步形成?!泵杜e算法作為使用最為普遍、學生必須掌握和正確運用的一種算法,教學可以基于問題的解決展開活動任務的設計,通過系列有邏輯相關性的任務活動,推動枚舉算法知識的學習。活動設計應圍繞教學目標展開,引導學生經歷算法解決問題的過程,應當體現(xiàn)探究性與實踐性,給學生獨立思考的機會,任務問題要有開放性,不是觸手可得,要體現(xiàn)對學生高階思維的培養(yǎng)。
3.搭建學習支架,促進計算思維培養(yǎng)
在算法與Python編程語言教學中,由于學生個體之間在認知水平、學習能力等方面存在差異,對于同一個項目任務,有些學生能夠很快完成,而有些學生可能就有難度。對于有些知識介紹,教師可以廣而告之,學生容易理解接受,但有些稍微復雜的內容,學生就不一定能夠很快的理解。為此,可以針對任務實踐過程中學生的反饋與表現(xiàn)提供個性化的學習支架來助學。教師可靈活運用一些網絡學習平臺、數(shù)字化學習資源和工具,如流程圖、思維導圖和程序代碼可視化等,幫助學生深層次體驗算法解決問題的全過程。通過不同算法方案的比較,使學生體會算法優(yōu)化的意義。教學要注重學習活動設計,強調信息技術與生活相聯(lián)系,任務問題設計要體現(xiàn)高階思維和深度學習,通過小組協(xié)作引導學生進行探究和交流,在交流和評價環(huán)節(jié),靈活選擇學生自評、互評和教師總結相結合的方式,從而全面提升學生的計算思維能力。
計算思維是信息技術學科四大核心素養(yǎng)之一,在信息技術學科教學中研究如何融入計算思維理念和運用計算思維方法,培養(yǎng)學生計算思維能力,具有重要意義。學生學習是一個生動活潑、主動和富有個性化的生成過程。指向計算思維培養(yǎng)的高中信息技術學習內容具有豐富性,學習對象具有差異性,對于不同地域、不同學習環(huán)境、不同學業(yè)基礎的學生實現(xiàn)計算思維能力提升,還需要我們積極探索有效的策略方法。以往的教學過多注重知識的傳輸,而缺乏能力和思維的培養(yǎng)。只有把知識、技能與思維三者緊密結合起來,將知識建構、技能培養(yǎng)與思維發(fā)展融入教與學全過程,以促進學生在主動參與、深刻理解、深度學習中培育和提高信息素養(yǎng),才能幫助學生不斷增強信息意識,發(fā)展計算思維,提高數(shù)字化學習與創(chuàng)新能力。
注:本文系江蘇省教育科學規(guī)劃課題“普通高中智優(yōu)生群體健全人格的培養(yǎng)研究”(項目編號:D/2015/02/415);鹽城市教育科學規(guī)劃課題“基于信息時代涵育高中生社會責任素養(yǎng)的實踐研究”(項目編號:2018-L-112)的階段性成果
參考文獻
教育部. 普通高中信息技術課程標準(2017年版2020年修訂)[M]. 北京: 人民教育出版社,2020.
楊沁憧. 計算思維視域下高中信息技術教材“數(shù)據(jù)與計算”部分的內容分析研究[D]. 呼和浩特:內蒙古師范大學,2021.
作者單位:江蘇省阜寧中學