







摘要:計算思維是解決問題的靈魂,但目前針對學生的思維訓練匱乏,為順利開展教學,作者以趣味拼圖解密項目進行實踐,所選項目具有趣味性和一致性,學生在解決問題的過程中感受算法魅力,提升計算思維。本文詳細描述了凱撒拼圖的教學設計并進行反思,希望可以為高中Python編程教學中如何培養計算思維提供有價值的參考。
關鍵詞:計算思維;凱撒密碼;高中Python
中圖分類號:G434" 文獻標識碼:A" 論文編號:1674-2117(2024)08-0039-04
《普通高中信息技術課程標準(2017年版2020年修訂)》強調了計算思維的重要作用,具體表現為學生在解決問題時所運用的分解、抽象、算法能力,以及學生能夠總結利用計算機解決問題的過程與方法,并將其遷移到與之相關的其他問題解決中。[1]而在目前的教學中,大部分學生存在思維訓練匱乏、計算思維不足的問題。計算思維作為一種思維方式,需要在解決問題的過程中不斷經歷分析思考、實踐求證、反饋調試而逐步形成。筆者通過教學實踐,發現在具有趣味性和一致性的項目中,學生能在解決問題的過程中充分發展和提升思維。下面,以“凱撒拼圖”教學設計為例具體闡述。
“凱撒拼圖”內容取自教科版高中信息技術必修一《數據與計算》第3單元“認識數據”中的第四節“加密與解密”,主要圍繞3.4中的凱撒加密算法進行課程教學,并以解密拼圖為項目主題(如圖1),通過學習凱撒密碼一系列的算法,完成四塊小拼圖的解密,從而得到拼圖背后隱藏的信息。
拼圖初探,小試牛刀
開門見山地給出拼圖,點出解開拼圖的關鍵就是掌握凱撒密碼算法,學生根據學習資源,自學凱撒密碼的歷史和加密原理。加密原理如下頁圖2所示,將英文字母順序向右移3位,3就是凱撒密碼的密鑰。假設此時明文是ABCD,那么通過凱撒加密后的密文就是DEFG。
如果要用Python來實現凱撒加密,存在字符和數字不能直接相加的問題。在3.1數據編碼中提到ASCII碼,ASCII碼是用二進制數表示一個字符,體現出字符和數字相互轉換的算法。教師可以參照此思路,利用Python中的函數ord,將字符轉換為十進制,學生自學ord函數,在初探拼圖中輸入ord函數將字符A轉換為數字的表達式,就得到第一塊碎片。
設計意圖:拼圖開始就抓住學生的眼球,解開拼圖的關鍵就是掌握凱撒密碼,將相對枯燥艱深的算法和拼圖聯系起來,激發學生的學習興趣;在初探中給一個簡單的ord問題,讓學生能有一個適應的過程,建立學習自信。
拼圖二探,承上啟下
有了ord函數的助力,明文字符可以轉為數字了,但數字如何轉換為密文字符呢?Python中還有將數字轉換為字符的函數chr,學生自學chr函數,完成字符移位的半成品代碼填空(如圖3),將代碼運行后的結果填入二探拼圖。
在活動中,一方面學生快速掌握了ord、chr函數的用法,意識到凱撒加密算法的實現實際上就是字符和數字的相互轉換;另一方面在發現代碼運行后,字符X對應的密文[顯然不正確,這是因為在凱撒加密的規律中,W的密文對應26個字母中的最末一個字母Z,接下來的XYZ又要重新開始對應ABC,所以會對26個字母的凱撒加密再次進行分情況討論。
設計意圖:二探拼圖的解密難度依然不高,可以得到第二塊密文碎片;以錯引正,承上啟下,自然過渡到下一個問題,進而充分發揮學生學習的主動性,啟發學生對凱撒加密算法進一步研究。
拼圖三探,水到渠成
學生在凱撒加密中分情況討論,總結出加密的規律:如果明文是大寫字母A~W和小寫字母a~w,進行ASCII碼+3的操作;如果明文是大寫字母X~Z和小寫字母x~z,就進行ASCII碼-23的操作;如果處理的字符不在小寫字母和大寫字母中,就進行原封不動的輸出。
又因為凱撒解密是加密的逆運算,解密規律如表1所示。學生完成凱撒解密的半成品代碼(如下頁圖4),解開qhaw nhb lv wzhqwbrqh密文,得到明文next key is twenty one,將明文輸入三探拼圖中,得到最后一塊碎片。目前,三塊拼圖碎片拼接起來就是一串密文:Fijrdib tjpmnzga viy ocz zizht dn diqdixdwgz di v cpiymzy wvoogzn。
設計意圖:三探拼圖的解開需要學生掌握密鑰為3時凱撒加密解密算法,難度逐漸提升,讓學生對凱撒密碼的原理和算法的理解越來越深入,同時也能為課堂營造解密的氛圍感;解開后已知破解密鑰為21,但仍然存在一段亟須解決的新密文,留下懸念,繼續探索。
拼圖破冰,一以貫之
已有的知識無法對破冰密文完成密鑰為21的解密,所以能不能有一個通法呢?根據凱撒密碼的特性,加密實際上就是將26個英文字母向后循環移動key位,對于每個明文字母c和密文字母b,加密公式如下所示:b=(c+key)%26。明文字母c對應0~25的編號,對c+key整除26取余數,保證密文字母b永遠在0~25內。
那么,如何給大寫明文字母C進行0~25的編號呢?可以將編號和現有的ASCII編碼聯系起來,通過下頁表2會發現編號即當前的字母編碼和大寫字母A編碼的差。
任意密鑰是教學設計中最難的部分,通過演示文稿結合板書給學生展示這個算法過程,第一步將字符c轉換成數字,板書ord(c),第二步由于c對應0~25的編號,所以計算c和字符A編碼之差,板書ord(c)-65,第三步帶入公式,板書b=(ord(c)-65 +key)%26,第四步b對應0~25的編號,所以再進行和字符A編碼相加,板書b=(ord(c)-65+key)%26+65,最后一步b轉換為字符,板書b=chr((ord(c)-65+key)%26+65)。
根據解密是加密的逆運算,解密公式為c=(b-key)%26。小寫明文字母a~z求解算法同上,學生完成破冰拼圖解密的半成品填空,如圖5所示。
設計意圖:在通過前面三個拼圖確保學生快速準確掌握傳統凱撒密碼方法的基礎上,破冰拼圖讓凱撒密碼更具挑戰性,理解任意密鑰的關鍵就是理解通式,所以,通過演示文稿的五步驟和同步板書,簡潔明了,帶領學生快速獲得算法要領。破冰是必不可少且至關重要的一部分,它讓整節課更加完整,不是簡單地對凱撒密碼進行淺顯的表面的學習,而是深入內部,洞見底蘊。同時,傳遞出算法是靈活多變的思想,鼓勵學生從多種角度思考問題。
撥云見日,深化主題
最后,拼圖里隱藏的信息是Knowing yourself and the enemy is invincible in a hundred battles。如圖6所示,學生很快能從英文和背景中知道這是《孫子兵法》中“知己知彼,百戰不殆”的英譯,這句詩的意思是只要對敵人的情況和自己的情況都有透徹的了解,作戰就不會有危險。從中可以發現,信息在戰爭中的價值非常之高,所以就打響了信息加密戰。從羅馬帝國的經典加密方式——凱撒密碼誕生起,密碼學就一直被用作爭奪全球主導地位的有力武器,它能深刻影響戰爭的結果。在現代社會,密碼學以保衛者的姿態守護在我們身邊,它對個人隱私和公共安全都有著至關重要的作用。學生有興趣的話可以在拓展資源里了解密碼學的相關知識。通過隱藏的信息,點出信息的價值性,深化加密解密在過去、現在和未來的意義,讓學生能合理認識和利用密碼學,提高信息安全保護意識。
教學反思
1.設置趣味情境,激起學習興趣
趣味的情境,可以快速抓住學生的注意力,讓信息技術的教學變得很容易出彩。本文中設置解開拼圖背后的信息情境,以掌握凱撒密碼為主線繼續解密,寓教于樂,每個學生都是解密的主人公。學生在創意情境下經歷從發現問題到解決問題的全過程,在此過程中,不斷激起學生探索新知的興趣,落實學生知識、技能、方法高度融合后的綜合運用。[2]
2.明確目標方法,深入分解問題
本文中的拼圖項目具有一致性,項目自始至終都就是解決一塊拼圖,并且解決的方法就是掌握凱撒密碼。在明確目標的基礎上,教師根據學生的學習規律和學習情況進行分解:第一層自學理解凱撒加密的原理;第二層掌握ord、chr函數,理解凱撒加密的算法,這實際上就是字符和數字的轉換;第三層由解密是加密的逆運算,過渡到解密算法;第四層從傳統型凱撒密碼延伸到通用型凱撒密碼。在分解過后,設置相應的任務,符合學生的思維認知。從低階到高階,完成一個任務相當于獲得一個學習激勵,所以在延伸問題深度的過程中,學生能夠保持學習的興趣和主動性。由于任務多而重,課堂時間有限,所以采用了半成品的程序填空形式,降低代碼編寫難度,重在讓學生理解凱撒密碼的算法。
3.重構組織方式,加強自主探究
教師是學生項目設計和實施過程中的引領者和咨詢者,在教學中,教師應淡化知識的單一講解,鼓勵學生通過自主探究解決項目中的問題。在本文中,在前面兩點的基礎上,教學設計是流暢通順的,所以教學實施就可以從教師主導變成教師引導,引導學生串聯以往的知識和經驗來解決現有問題,如解決字符和數字相加的算法可以類比3.1中文字編碼的ASCII碼,又如通項公式中的%26是為了讓數值在0~25中,類比2.4可以復用的代碼中生肖計算時使用到的%12,從而總結取模的規律。鼓勵學生在遇到新的問題時,自我探究尋找合適的解題策略,通過聯系已有知識,從中得到啟發,將其遷移到新問題中來,為要解決的問題指引方向。
所以,教師應積極發現可以運用于課堂教學的趣味情境,對其進行一致性設計,并對目標問題層層分解,逐步深化,重構課堂教學組織方式,讓學生在自主解決問題的過程中感受算法魅力,發展計算思維。
參考文獻:
[1]郭芮.深度學習算法,提升計算思維——以“青蛙跳臺階”的遞歸算法為例[J].中國信息技術教育,2023(17):46-48.
[2]朱益.基于問題解決的高中信息技術單元教學設計探索——以“數據問題”單元教學為例[J].中國信息技術教育,2023(07):45-48.