新世紀版信息技術八年級下冊第十二課 變化無窮的燈 教案.doc
新世紀版信息技術八年級下冊第十二課變化無窮的燈教學設計課題 變化無窮的燈單元第一單元學科信息技術年級八年級學習目標知識目標:學習字符串的運算,掌握幾種常用的字符串運算。技能目標:進一步熟悉 eval 函數的使用方法;進一步熟悉列表的操作。情感目標:通過對編程的學習,培養學生分析理解程序的能力。重點自主學習 Python 命令、函數的用法。難點本課所用 到的命令比較多,也比較難理解。教學過程教學環節教師活動學生活動設計意圖導入新課上節課我們學習了,通過編程做石頭剪刀布的游戲。這節課,我們學習通過編程,可以讓micro:bit點陣屏幕呈現無窮的變化。觀察思考激發學生學習興趣并快速進入學習狀態講授新課一、全屏呼吸燈全屏呼吸燈讓整個點陣屏幕整齊劃一地呈現呼吸燈的效果。【例題1】編寫程序,讓micro:bit屏幕變成呼吸燈。其設計思路是:設計 10 個不同亮度的點陣圖案,然后循環顯示這 10 個圖案,讓點陣屏幕 呈現呼吸燈的效果。程序如下:from microbit import * i0=Image(00000:00000:00000:00000:00000) i1=Image(11111:11111:11111:11111:11111) i2=Image(22222:22222:22222:22222:22222) i3=Image(33333:33333:33333:33333:33333) i4=Image(44444:44444:44444:44444:44444) i5=Image(55555:55555:55555:55555:55555) i6=Image(66666:66666:66666:66666:66666) i7=Image(77777:77777:77777:77777:77777) i8=Image(88888:88888:88888:88888:88888) i9=Image(99999:99999:99999:99999:99999) images=i0,i1,i2,i3,i4,i5,i6,i7,i8,i9 display.show(images,delay=500,wait=True,loop=True,clear=True)如果用圖形化的方式編程,這個案例比較容易,但為了掌握更多的編程知識特意將圖形化的方式編寫的程序用代碼方式進行了優化。具體來說:00000 可以表述成 0*5因此: img=00000:00000:00000:00000:00000 可以表示成:img=(0*5+:)*4+0*5于是我們可以用循環語句來生成呼吸燈的每一個圖案,并將該圖案加入到 列表 images 中:images.append(img)往列表中加入元素是經常會遇到的操作,命令格式如下:列表名稱 .append( 往列表中加入的元素 )因此上面的程序可以優化為:from microbit import * images= for i in range(10): ix=(str(i)*5+:)*4+str(i)*5 img=Image(ix) images.append(img) display.show(images,delay=500,wait=True,loop=True,clear=True)小博士Python字符串的幾種常見運算假設: a=Hello b=Python 則:試一試修改【例題1】,使呼吸燈的閃爍規律變為“逐漸變亮逐漸變暗”。from microbit import *images= for i in range(10): ix=(str(i)*5+:)*4+str(i)*5 img=Image(ix) images.append(img) for i in range(9,0,-1): ix=(str(i)*5+:)*4+str(i)*5 img=Image(ix) images.append(img) display.show(images,delay=100,wait=True,loop=True,clear=True)二、走馬燈走馬燈是指循環顯示的一組燈。【例題2】設計一個燈光繞著mico:bit點陣屏幕的四周移動的走馬燈。這個走馬燈實際上是一個有16幅畫面的動畫。程序如下:from microbit import * images = i1=Image(90000:00000:00000:00000:00000) i2 = Image(09000:00000:00000:00000:00000) i3 = Image(00900:00000:00000:00000:00000) i4 = Image(00090:00000:00000:00000:00000) i5 = Image(00009:00000:00000:00000:00000) i6 = Image(00000:00009:00000:00000:00000) i7 = Image(00000:00000:00009:00000:00000) i8 = Image(00000:00000:00000:00009:00000) i9 = Image(00000:00000:00000:00000:00009) i10 = Image(00000:00000:00000:00000:00090) i11 = Image(00000:00000:00000:00000:00900) i12 = Image(00000:00000:00000:00000:09000)i13=Image(00000:00000:00000:00000:90000) i14=Image(00000:00000:00000:90000:00000) i15=Image(00000:00000:90000:00000:00000) i16=Image(00000:90000:00000:00000:00000)images.append(eval(ix) display.show(images, delay=500, wait=True, loop=True, clear=True)在上面的程序中,images是包含了16幅畫的列表由于創建images的表述非常長,因此上面的程序用了一個for循環來創建images列表遍歷116,依次將16個畫面添加到列表images。for i in range(1,17,1): ix = i + str(i) images.append(eval(ix)在上面的程序片段中,ix 是一個變量名字符串要用 eval(ix) 才能將字符 串的引號去掉,轉變成變量名:函數 eval(“字符串 str”)的作用是:將“字符串 str”轉換成表達式,相當于把字符串外面的引號去掉。【例題 3】設計一個遍歷mico:bit點陣屏幕所有LED燈的走馬燈。點陣屏幕上有25個LED燈,分別用024來編號,假設某LED燈的編號是n,那么它的x、y 坐標就是:x = n % 5 y = int(n / 5)其中%是求余運算,int()是取整運算。例如:n=10,那么 x=10%5,即 x=0 ;y=int(10/5),即 y=2。程序用 n 來控制亮燈的位置,當 n 超過 25 時,應該將 n 重置為 0,也就是 說可以對 n 進行求余運算:n=n%25。程序如下:from microbit import * import random n = 0 while True: x = n % 5 y = int(n / 5) display.set_pixel(x, y, 9) n = (n + 1) if (n 24): n = 0 sleep(100) display.set_pixel(x, y, 0)試一試設計一個走馬燈。例如,修改上面的程序,將 n=n+1 修改為 n=n+3,就得到了一個新的走馬 燈程序如下:from microbit import * n = 1 while True: x = (n % 5) y = int(n / 5)display.set_pixel(x, y, 9) n = (n + 3)%25 sleep(200) display.set_pixel(x, y, 0)如果要得到兩盞燈往前移動的效果,只要在程序中增加一盞相鄰的燈。程序如下:from microbit import * n = 0 while True: x = (n % 5) y = int(n / 5) display.set_pixel(x, y, 9) n = (n + 1)%25 x1 = (n % 5) y1 = int(n / 5) display.set_pixel(x1, y1, 9) sleep(200) display.set_pixel(x, y, 0) display.set_pixel(x1, y1, 0)三、燈光瀑布【例題4】設計一個燈光瀑布。程序如下:from microbit import * n=0 while True: n=(n-1)%10 img=str(n)*5 for i in range(4): t=(n+i)%10img=img+:+str(t)*5display.show(Image(img) sleep(50) if button_b.was_pressed(): break在上面的程序中語句 n=(n+1)%10 的作用與下列語句相同: n=n+1n=n%10 程序通過如下 for 循環,不斷生成點陣屏幕畫面的列表:img=str(n)*5 for i in range(4): t=(n+i)%10 img=img+:+str(t)*5然后顯示 50 毫秒,通過 while 循環,形成燈光瀑布的視覺效果:display.show(Image(img) sleep(50)運行程序,可以看到點陣屏幕上的燈光像瀑布一樣傾瀉下來。當按下按鈕B,程序就終止運行。可以看到程序結束前點陣屏幕上最后顯示的燈光。當按下micro:bit的復位鍵后,程序又會重新運行。在上面的程序中,利用了求余運算來使得變量n在9和0之間不斷循環。求余運算%的格式和功能如下:格式:a%b功能:求a除以b的余數。例如:while True循環中,每次循環生成一個點陣屏幕,點陣屏幕各LED燈的亮度由for循環生成。詳情如下:同樣的效果也可以由下面的程序實現:試一試你能參照【例題4】,做一個全屏呼吸燈嗎?參考程序如下:from microbit import * n=0 while True: n=(n+1)%10 img=(str(n)*5+:)*4+str(n)*5 display.show(Image(img) sleep(50)通過教師的講解,以小組合作的方式,開展探討交流,完成任務。通過老師演示學生動手操作,提高動手能力。小組交流、分享學生動手實踐操作,學生小組間討論,共同完成任務。通過老師演示學生動手操作,提高動手能力。小組交流、分享通過教師的講解,以小組合作的方式,開展探討交流,完成任務。學生動手實踐操作,學生小組間討論,共同完成任務通過教師的講解,以小組合作的方式,開展探討交流,完成任務。通過教師的講解,以小組合作的方式,開展探討交流,完成任務。學生動手實踐操作,學生小組間討論,共同完成任務通過小組合作,加強學生組內團結、加強學生組內團結、共同完成任務,培養學生動手操作能力,并且鍛煉學生的語言組織能力和表達的能力。加強學生組內團結、共同完成任務,培養學生組間合作能力,并且煉動手能力 培養學生動手操作能力,并且鍛煉學生的語言組織能力和表達的能力。培養學生組間合作能力,并且煉動手能力培養學生組間合作能力,并且煉動手能力培養學生動手操作能力,并且鍛煉學生的語言組織能力和表達的能力課堂小結分小組總結歸納,教師補充。各組匯報總結,其他小組成員做補充。鍛煉學生的總結能力,邏輯思維、語言表達能力。板書一、全屏呼吸燈二、走馬燈三、燈光瀑布