何青波
【摘 要】本案例是以身邊事物入手,鼓勵學生多觀察生活、多思考,介紹了高中信息技術(shù)《可以復(fù)用的代碼》這一節(jié)課的案例背景、案例過程及案例反思;介紹了利用自定義函數(shù)進行凱撒密碼加密的思路與過程。
【關(guān)鍵詞】案例;自定義函數(shù);密碼;密鑰;學生主體
【中圖分類號】G434 【文獻標識碼】A
【論文編號】1671-7384(2021)09-062-03
案例背景
自定義函數(shù)雖然在粵教版教材中并未單獨拿出一節(jié)課來需要講授,但在學考和很多比賽中,都出現(xiàn)了自定義函數(shù)的身影,因此有必要拿出一節(jié)課講授自定義函數(shù),同時回顧之前所學內(nèi)容。由于凱撒密碼對每一次傳輸?shù)男畔⒍家M行加密,即加密功能這一部分代碼是需要重復(fù)使用的,故可以通過探究學習自定義函數(shù)對凱撒密碼加密。
案例描述
1.情景模擬,課堂導(dǎo)入
為充分調(diào)動學生學習的積極性,引起學生對編程學習的興趣,課前我隨機找到幾個學生,其中不乏性格外向、具有表演能力的學生,也有性格內(nèi)斂、需要多些表現(xiàn)機會的學生,告訴他們表演的主題為“上課傳紙條,紙條信息卻被老師截獲”,讓學生自導(dǎo)自演,進行情景模擬再現(xiàn)。上課伊始,幾個學生的精彩出演,有意想不到的效果。此時,我趁機拋出問題讓學生思考:如何對紙條信息進行加密,紙條即便被老師發(fā)現(xiàn)也不會獲取到任何有價值的信息?學生很活躍,很多學生都提到了加密,我順勢引出了最原始的加密方式—— 凱撒密碼,同時引出了本堂課的教學主題—— Python之探秘凱撒密碼。
2.視頻介紹“凱撒密碼”
班級里僅有少部分學生聽說過凱撒密碼,但對它加密的原理一知半解。為讓學生充分理解凱撒密碼加密的原理,我利用視頻介紹凱撒密碼的加密原理,并在視頻播放前讓學生帶著如下幾個問題觀看視頻并思考:
(1)什么是明文和密文?
(2)什么是密鑰?它的作用是什么?
(3)用自己的語言組織一下凱撒密碼加密的原理是怎樣的?
學生對于密碼加密有著較高的求知欲,學習興趣濃厚,所以在觀看完視頻后,每個小組派了一名代表回答問題。加密前的原始信息稱為明文,加密后的字母信息稱為密文,移位發(fā)生的偏移量稱為加密算法的密鑰。有了密鑰,發(fā)送方就可以將明文加密成密文發(fā)給接收方,接收方知道加密時使用的密鑰就可以將密文還原成明文,破譯出真正的密碼信息。凱撒密碼加密的原理是依次對明文中的每個字符依據(jù)密鑰按照字母表順序進行一定的偏移,得到對應(yīng)的密文字符。
3.任務(wù)驅(qū)動,激發(fā)興趣
任務(wù)一:系統(tǒng)內(nèi)置函數(shù)實現(xiàn)凱撒密碼加密
“假設(shè)密鑰為2,將明文‘a(chǎn)加密轉(zhuǎn)換成密文的過程是怎樣的呢?讓我們一起畫出它的示意圖?!痹赑ython里面,字符是不能直接與整數(shù)進行相加運算的,但計算機中的英文字符編碼統(tǒng)一采用的是ASCII編碼,所以順勢回顧了Python中可以用來查詢字符對應(yīng)ASCII的內(nèi)置函數(shù)ord()及可以用來查詢ASCII對應(yīng)字符的內(nèi)置函數(shù)chr(),并與學生合力畫出了示意圖,如圖1所示。有了示意圖,學生對凱撒密碼加密的原理理解得愈發(fā)深刻。
圖1? 凱撒密碼加密原理示意圖
“假設(shè)加密前的明文字符用x表示,加密后的密文字符用y表示,密鑰用變量offset來表示。請第一組和第二組的同學利用自然語言來描述凱撒加密算法,第三組和第四組的同學利用流程圖來描述凱撒加密算法?!边@樣,老師與學生一起順勢回顧了算法描述的三種方法。而有了凱撒密碼加密的示意圖,同學們利用自然語言來描述凱撒加密算法基本都沒有什么問題。但用流程圖來描述凱撒加密算法時,學生因為剛接觸流程圖相關(guān)圖形及符號,容易錯用流程圖圖形。
之后將待全部完成的程序下發(fā)給學生,經(jīng)過剛才算法描述方法的學習,學生基本能夠補充完整ord()和chr()函數(shù)完善程序。在按F5鍵運行程序后,有學生提出疑問:“密鑰為2時,‘y偏移2位后,程序運行后得到的結(jié)果為什么是左花括號?”有其他同學通過翻閱課本上的ASCII表發(fā)現(xiàn),在ASCII表中,字符y往后移動2位后,對應(yīng)的字符就是左花括號?!叭绻用軙r超過了字符‘z,就需要從‘a(chǎn)重新開始,即‘y偏移2位得到的字符應(yīng)該是a,我們把這種偏移方式叫做循環(huán)偏移。那如何實現(xiàn)循環(huán)偏移呢?”找三個同學A、B、C上講臺圍成一個圈做一個依次報1-20之間數(shù)字的游戲,之后隨機說出1-20之間的一個數(shù)字,比如17,詢問在座的同學們剛才報過17這個數(shù)字的是哪個同學,同學們異口同聲回答B(yǎng)同學。隨機找個學生詢問為什么是B同學?學生給出了用17除以總?cè)藬?shù)求余數(shù)的方法。這時同學們恍然大悟,開始思考可以通過給26個小寫英文字母重新編下號,使用求余數(shù)的方法實現(xiàn)循環(huán)偏移。
任務(wù)二:自定義函數(shù)實現(xiàn)單個字符的加密
“假設(shè)加密前的明文字符編號為xid,加密后的密文字符編號為yid,密鑰用變量offset來表示?!睂W生可嘗試寫出(xid+offset)%26獲得對小寫字母的循環(huán)偏移值即yid的值。再次讓學生熟悉了ASCII表,同時回顧了求余思想及求余符號%。此時順勢讓學生思考:什么是函數(shù)?即完成某個會重復(fù)使用的特定功能或操作的程序就被稱為函數(shù),而這個函數(shù)如果是同學們自己定義的就被稱為自定義函數(shù)。老師用課件顯示自定義函數(shù)的格式,對其要點進行講解,之后讓同學們將收到的循環(huán)偏移程序改寫成帶自定義函數(shù)的程序。由于時間受限,最終只看了兩個學生完成的程序,讓其他同學幫助這兩個學生找出程序出現(xiàn)的錯誤,同時再次概括使用自定義函數(shù)需要注意的問題:一是應(yīng)用def來聲明自定義函數(shù),函數(shù)先聲明之后才能被調(diào)用;二是應(yīng)使用縮進來表示函數(shù)體內(nèi)容,函數(shù)若有返回值時,使用return語句返回函數(shù)的計算結(jié)果;三是理解圓括號中可以定義參數(shù),明確函數(shù)名及冒號的位置,起函數(shù)名稱時最好見名知意。
任務(wù)三:自定義函數(shù)實現(xiàn)對一段文本的加密
“發(fā)送方與接收方之間現(xiàn)在擬定如下規(guī)則:當對明文字符串進行加密時,若該字符是小寫字母就對其進行加密,否則不加密。請同學們思考如何實現(xiàn)對一段文本的加密?”引導(dǎo)學生思考解決問題的方法:
(1)把明文中的字符一個個拿出來進行判斷(循環(huán)結(jié)構(gòu)for)。
(2)如果該字符是小寫字母(選擇結(jié)構(gòu)if),就對其進行加密(自定義的加密函數(shù)),否則就什么也不做。
(3)字符串的連接操作(+)。
之后讓同學們小組合作,上機嘗試完善半成品程序并展示。
def encode(x,key):? ? ? ? ?#單個字符的加密實現(xiàn)
xid = ord(x) - 97
yid = ————
y = chr(97 + yid)
return y
def text(str,key):? ? ? ?#文本的凱撒加密算法實現(xiàn),key為密鑰
result = ''
for i in str:? ? ? ? ? # i表示明文字符串str中依次獲取到的每個字符
if ————:? ? ? ? ?#如果i是小寫字母
i =————
result += i? ? ? ? #字符串的連接操作
return result
print(text('Attack Tomorrow!',2),end="")
讓同學們根據(jù)完善好的程序思考:
(1)如果偏移量變成5,修改哪個地方?
(2)程序是從哪一句開始執(zhí)行的?
(3)自定義函數(shù)有哪些優(yōu)點?
通過對這三個問題的思考,學生基本可以自己總結(jié)出自定義函數(shù)的優(yōu)點。有的學生提到了模塊化;有的學生說當需要修改代碼時,只需要修改一次代碼。對于正確的回答我給予了肯定,同時給出比較專業(yè)的術(shù)語“降低代碼的冗余度和代碼重用”,此時學生更容易理解術(shù)語。
4.總結(jié)鞏固,課堂升華
總結(jié)本課所學內(nèi)容,并用課件呈現(xiàn),同時展開頭腦風暴。“如何看待及更好地對信息進行安全保護?”學生踴躍回答,有提到備份保護的,有提到用更安全加密方式的,學生進一步感受到了安全保護的重要性。
課件呈現(xiàn)——可以復(fù)用的代碼:
(1)函數(shù)的分類:(系統(tǒng)內(nèi)置函數(shù)、自定義函數(shù))
(2)函數(shù)的定義:def 函數(shù)名(參數(shù)):
函數(shù)體
return 返回值
(3)函數(shù)的調(diào)用:函數(shù)名(參數(shù))
(4)函數(shù)的優(yōu)點:降低代碼的冗余度和代碼重用。
案例反思
(1)要引導(dǎo)學生多對身邊事物進行留意觀察,提出疑問,進而想辦法去分析、解決問題,強調(diào)理論與實踐相結(jié)合,這樣可以大大激發(fā)學生學習知識的興趣。
(2)在課堂上,要始終堅持學生是學習的主體,教師不僅要教授知識,還要注重對學生思想層面及價值觀的引導(dǎo)。比如讓學生認識到加密及安全保護的重要性,從而讓學生在課堂上真正實現(xiàn)“在學中做、在做中創(chuàng)、在創(chuàng)中樂”。
(3)積極參加游戲和被給予肯定的同學往往在課堂上比往常更活躍些,所以要經(jīng)常對學生予以鼓勵,增強學生的獲得感和自信心。
(4)整體來講,這是綜合實戰(zhàn)比較成功的一節(jié)課,學生不僅對之前學過的內(nèi)容做了很好的鞏固,同時也真正實現(xiàn)了寓教于樂,也反映了學生具備較好的綜合素養(yǎng)。但因一節(jié)課的時間有限,本堂課只能讓學生在半成品作品基礎(chǔ)上進行補充完善,學生上機實踐時間較短,影響了教學效果。
作者單位:山東濟南大學城實驗高級中學