新世紀版信息技術八年級下冊第十二課 變化無窮的燈 課件.pptx
新世紀版信息技術 八年級下冊,第十二課 變化無窮的燈,新知導入,新知講解,一、全屏呼吸燈,全屏呼吸燈讓整個點陣屏幕整齊劃一地呈現呼吸燈的效果。,【例題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),新知講解,這個走馬燈實際上是一個有16幅畫面的動畫。,走馬燈是指循環顯示的一組燈。,【例題2】設計一個燈光繞著mico:bit點陣屏幕的四周移動的走馬燈。,二、走馬燈,新知講解,程序如下:,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),新知講解,函數 eval(“字符串 str”)的作用是:,在上面的程序片段中,ix 是一個變量名字符串,要用 eval(ix) 才能將字符 串的引號去掉,轉變成變量名:,將“字符串 str”轉換成表達式,相當于把字符串外面的引號去掉。,新知講解,點陣屏幕上有25個LED燈,分別用024來編號,假設某LED燈的編號是n,那么它的x、y 坐標就是:,x = n % 5 y = int(n / 5),【例題 3】設計一個遍歷mico:bit點陣屏幕所有LED燈的走馬燈。,其中%是求余運算,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),新知講解,from microbit import * n=0 while True: n=(n-1)%10 img=str(n)*5 for i in range(4):,【例題4】設計一個燈光瀑布。,程序如下:,三、燈光瀑布,t=(n+i)%10 img=img+:+str(t)*5 display.show(Image(img) sleep(50) if button_b.was_pressed(): break,新知講解,語句 n=(n+1)%10 的作用與下列語句相同: n=n+1 n=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),運行程序,可以看到點陣屏幕上的燈光像瀑布一樣傾瀉下來。,新知講解,當按下micro:bit的復位鍵后,程序又會重新運行。,當按下按鈕B,程序就終止運行。,可以看到程序結束前點陣屏幕上最后顯示的燈光。,在上面的程序中,利用了求余運算來使得變量n在9和0之間不斷循環。,新知講解,格式:a%b,功能:求a除以b的余數。,求余運算%的格式和功能如下:,例如:,新知講解,while True循環中,每次循環生成一個點陣屏幕,點陣屏幕各LED燈的亮度由for循環生成。,n=9,img=99999:99999:00000:11111:22222 n=8,img=88888:88888:99999:00000:11111 n=7,img=77777:77777:88888:99999:00000 n=6,img=66666:66666:77777:88888:99999 n=5,img=55555:55555:66666:77777:88888 n=4,img=44444:44444:55555:66666:77777 n=3,img=33333:33333:44444:55555:66666 n=2,img=22222:22222:33333:44444:55555 n=1,img=11111:11111:22222:33333:44444 n=0,img=00000:00000:11111:22222:33333,詳情如下:,新知講解,同樣的效果也可以由下面的程序實現:,新知講解,你能參照【例題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),參考程序如下:,課堂小結,總結本節課所學內容,板書設計,一、全屏呼吸燈 二、走馬燈 三、燈光瀑布