中小学教育资源及组卷应用平台
新世纪版信息技术八年级下册第十二课变化无穷的灯教学设计
课题
变化无穷的灯
单元
第一单元
学科
信息技术
年级
八年级
学习目标
知识目标:学习字符串的运算,掌握几种常用的字符串运算。技能目标:进一步熟悉
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列表遍历1~16,依次将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灯,分别用0~24来编号,假设某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+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)
运行程序,可以看到点阵屏幕上的灯光像瀑布一样倾泻下来。当按下按钮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)
通过教师的讲解,以小组合作的方式,开展探讨交流,完成任务。通过老师演示学生动手操作,提高动手能力。小组交流、分享学生动手实践操作,学生小组间讨论,共同完成任务。通过老师演示学生动手操作,提高动手能力。小组交流、分享通过教师的讲解,以小组合作的方式,开展探讨交流,完成任务。学生动手实践操作,学生小组间讨论,共同完成任务通过教师的讲解,以小组合作的方式,开展探讨交流,完成任务。通过教师的讲解,以小组合作的方式,开展探讨交流,完成任务。学生动手实践操作,学生小组间讨论,共同完成任务
通过小组合作,加强学生组内团结、加强学生组内团结、共同完成任务,培养学生动手操作能力,并且锻炼学生的语言组织能力和表达的能力。加强学生组内团结、共同完成任务,培养学生组间合作能力,并且炼动手能力
培养学生动手操作能力,并且锻炼学生的语言组织能力和表达的能力。培养学生组间合作能力,并且炼动手能力培养学生组间合作能力,并且炼动手能力培养学生动手操作能力,并且锻炼学生的语言组织能力和表达的能力
课堂小结
分小组总结归纳,教师补充。
各组汇报总结,其他小组成员做补充。
锻炼学生的总结能力,逻辑思维、语言表达能力。
板书
一、全屏呼吸灯二、走马灯三、灯光瀑布
21世纪教育网
www.21cnjy.com
精品试卷·第
2
页
(共
2
页)
HYPERLINK
"http://www.21cnjy.com/"
21世纪教育网(www.21cnjy.com)(共31张PPT)
新世纪版信息技术
八年级下册
第十二课
变化无穷的灯
新知导入
上节课我们学习了,通过编程做石头剪刀布的游戏。这节课,我们学习通过编程,可以让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"
则:
操作符
描 述
实 例
+
字符串连接
〉〉〉a
+
b
'HelloPython'
重复输出字符串
〉〉〉a
2
'HelloHello'
[]
通过索引获取字符串中字符
〉〉〉a[1]
'e'
[:]
截取字符串中的一部分
〉〉〉a[1:4]
'ell'
新知讲解
试一试
修改【例题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列表
遍历1~16,依次将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灯,分别用0~24来编号,假设某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的余数。
求余运算%的格式和功能如下:
例如:
表达式
-1%10
0%10
1%10
2%10
…
7%10
8%10
9%10
10%10
值
9
0
1
2
…
7
8
9
0
新知讲解
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)
参考程序如下:
课堂小结
总结本节课所学内容
板书设计
一、全屏呼吸灯
二、走马灯
三、灯光瀑布
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
有大把高质量资料?一线教师?一线教研员?
欢迎加入21世纪教育网教师合作团队!!月薪过万不是梦!!
详情请看:
https://www.21cnjy.com/help/help_extract.php