5.2.3 continue 和 break
1. continue
continue 表示跳过当前的一次循环。比如从 0 循环到 10,每次循环执行显示当前数字,当执行显示到 5 时,跳过 5,即不显示 5,直接进入显示 6 的循环中。代码如下:
i=0
while i<11:
if i==5:
continue
else:
display.show(str(i))
2. break
break 与 continue 不同, break 表示直接中断循环。比如在下面的代码中,即将上面代码中的 continue 换为 break,则只显示到数字 4,当 i 为 5 时,就跳出循环,后面的数字不再显示。
i=0
while i<11:
if i==5:
break
else:
display.show(str(i))
注意: 在 Python 中,是通过缩进来区分代码块的。比如在 for 循环语句中,冒号后的块内语句全部向右缩进。代码缩进几个字符没关系,但同一个块内的语句一定要缩进相同。
5.3 画一个会走的机器人
5.3.1 使用“创建图像”拼画一个静止的机器人
① 在左侧的块选择区中找到“显示”块,用鼠标选中拼 ,拖曳至模块编辑区,如图 5-1 所示。

② 在左侧的块选择区中找到“图形”块,用鼠标选中“创建图像”插 ,拖曳至模块编辑区,并与“显示图像”进行拼插,如图 5-2 所示。

③ 选择“创建图像”插的一个黑色区域,并选中蓝色,蓝色到黑色一共分10 级,分别代表 LED 灯的亮度,这里我们选择最亮的蓝色。全部选择完毕后,效果如图 5-3 所示。

④ 保持程序名 TurnipBit 不变,点击“下载 hex”按钮将程序保存到电脑中,如图 5-4 所示。

⑤ 把所保存的 HEX 文件拖入 TURNIPBIT 磁盘中,我们会看到 TurnipBit 板子上的灯在闪烁,说明正在下载到控制板中。下载成功后,我们会看到程序正常运行,效果如图 5-5 所示。

【思考】
静止的机器人,怎样才能让它动起来呢?
5.3.2 使用“创建图像”让机器人动起来
如何才能让机器人动起来呢?
现在我们一起来分解一下机器人走路的动作。我们将机器人走路分为 3 个动作,即“立正”“左脚迈出”“右脚迈出”,如图 5-6 所示。将这 3 个动作连起来,并切换显示得快一些,在“视觉暂留”原理的作用下,绿灯机器人看似就动起来了。下面我们尝试通过编程来看看效果。

① 在左侧的块选择区中找到“显示”块,用鼠标选中 , 拖曳至模块编辑区。
② 在左侧的块选择区中找到“图形”块,用鼠标选中“创建图像”,插入“显示图像”中,并描画设定好的 3 个连接动作的机器人,如图 5-7 所示。

③ 在 3 个机器人后面加上一个“ TurnipBit”中的“睡眠”,并把睡眠时间调整成 300 毫秒,如图 5-8 所示。

④ 点击“下载 hex”按钮保存文件, 并把所保存的 HEX 文件拖入 TURNIPBIT磁盘中,我们会看到 TurnipBit 板子上的灯在闪烁,说明正在下载到控制板中。下载成功后,我们会看到程序正常运行,机器人也就走起来了。
【思考】
考虑加入无限循环,让机器人一直走下去。
5.3.3 让机器人一直走下去
在上面的例子中,机器人只走了一次,那么如何让机器人一直走下去呢?我们一起看看下面的例子。
如图 5-9 所示加入了两个新的拼插。
( 1)“循环”中的“重复当” ,这就是 while 循环。
( 2)“逻辑”中的逻辑布尔值 ,表示无限循环。

下面我们一起来分析程序。
while 循环开始后,先判断条件是否满足,如果满足就执行循环体内的语句,执行完毕后再回来判断条件是否满足,如此无限重复;直到条件不满足时,执行while 循环后面的语句。因为条件是“真”,所以一直满足,机器人会一直走下去,如图 5-10 所示。

那么该如何让机器人停下来呢?我们前面学到的 break 语句可以解决这个问题。
如图 5-11 所示,在右侧的这段程序中,当按键 A 按下时, LED 灯会滚动显示“ Red Led”;松开后是绿灯,绿灯时机器人会走。机器人会走多长时间呢?“运行时间” running_time()函数决定了机器人的走动时间。这里设定 60 秒,通上电60 秒内( running_time()<60000)机器人会一直走动,超过 60 秒后中断循环,机器人停止走动; 在 60 秒内如果按键 A 处于按下状态, 机器人会消失, 会显示“ Red Led”,即相当于红灯,如果松开按键 A,在 60 秒内机器人就会继续行走。试试这段代码,看看你还能做哪些改进?
在这里介绍一下逻辑拼插。逻辑块中的“如果”就是分支判断结构,如果满足后面的条件,就执行“执行”内的语句(关于条件语句,具体见第 6 章)。在本例中, “按键 A 被按下”的条件,就是当按键 A 被按下时触发执行语句的意思。当按键 A 被按下后,滚动显示消息“ Red Led”。

TurnipBit 有两个按键,即按键 A 和按键 B,每个按键有三种状态。
y “按键 A 被按下”:按键 A 被按下的状态。
y “按键 A 曾经按下”:按键 A 曾经按下过,与现在的状态无关。
y “按键 A 曾经按下过的次数”:返回的是数字,表示按键 A 曾经按下过的
次数,当达到这个条件时就会执行指定的语句。
5.3.4 画出会走的机器人的流程图
下面给出伪代码。
Begin(算法开始)循环体开始
如果按键 A 被按下显示“Red Led”(现在是红灯)否则
如果执行时间大于 60 秒结束循环,跳出循环体
右腿在后面睡眠 0.3 秒立正 睡眠 0.3 秒左腿在前面睡眠 0.3 秒循环体结束End (算法结束)
根据伪代码画出流程图,如图 5-12 所示。

【思考】
如何让机器人走 30 秒再停止呢?
5.4 知识要点
5.4.1 拼插编程
【掌握】
y 中断的概念。
y 会使用“睡眠”。
y 会使用“中断循环”。
【理解】
y 动画原理。
y for、 while 循环的应用。
y continue、 break 的使用。
5.4.2 代码编程
【掌握】
y 循环的用法。
y 中断的用法。
【理解】
y 睡眠的用法。
y 运行时间的用法。
y 按键的状态。
第 6 章 好玩的掷骰子游戏
6.1 掷骰子游戏
骰子,中国古代民间娱乐用来投掷的博具。骰子通常作为桌上游戏的小道具,最常见的是六面骰,它是一个正立方体,上面分别有 1~6 个孔(或数字),其相对两面的数字之和必为 7。中国的骰子习惯在一点和四点漆上红色。骰子是容易制作和取得的乱数产生器。
现在,我们就利用 TurnipBit 板载的 5× 5 LED 点阵来完成这样一个古老的小游戏。
所需器材:
y TurnipBit 开发板一块
y 下载数据线一条
y 接入互联网的电脑一台(推荐使用 Google Chrome 或者 Firefox 浏览器)
6.2 学会做选择题
在上一章中,我们在做会走的机器人的时候,用到了“如果运行时间超过 60秒”。这个“如果”就是在做选择题。在编程过程中,我们经常会进行选择决策。下面给出几个例子。
如果 10 道题全做对,那么就得 100 分。
如果击中对方飞机,对方飞机就消失,同时得分加 1 分。如果到了黑夜,那么小夜灯亮起。
程序在执行时,就是对“如果”条件进行检测。如果为“真”,那么做出相应的决策;如果为“假”,那么做出其他决策。
6.2.1 逻辑运算
任何程序设计语言都具有逻辑运算这个基本功能, Python 也一样。说到逻辑运算,首先要学会判断“真”和“假”。例如, 10 小于 20,就是“真”,而相反就是“假”。逻辑运算的结果返回均为“真”或者“假”, “真”用 True 表示, “假”用 False 表示。在 TurnipBit 编程界面的“块”中有“逻辑”模块,这里包含了当前拼插编程支持的逻辑运算符。
1.比较运算符
比较运算符在“逻辑”模块内,形式如图 6-1 所示。

假设变量 a 为 5, b 为 10,比较运算符的含义如表 6-1 所示。

2.逻辑运算符
逻辑运算符也在“逻辑”模块内,形式如图 6-2 所示。

假设变量 a 为 1, b 为 0,逻辑运算符的含义如表 6-2 所示。

6.2.2 if 判断语句
在 Python 编程中, if 语句用于控制程序的执行。其基本形式为:
if 判断条件 1:
执行语句 1 elif 判断条件 2: 执行语句 2 elif 判断条件 3: 执行语句 3 else:执行语句 4

对应到拼插编程中,就是如图 6-3 所示的这个模块。在这个模块中,你可以任意拖入不同的配置,对应的程序分支有以下几种。
1. “如果,那么”
这是判断语句中最简单的方式,如图 6-4 所示。如果条件满足,那么执行“如果”条件块内的语句。对应的 if 语句格式为:
if (条件): pass

2. “如果,那么,否则”
判断语句“如果,那么,否则”,需要在“如果”配置中加入“否则”,如图 6-5 所示。如果条件满足,就执行“那么”块内的语句;如果条件不满足,那么执行“否则”块内的语句。对应的 if 语句格式为:
if (条件):
pass else: pass

3. “如果,那么,否则如果,那么,否则”
判断语句“如果,那么,否则如果,那么,否则”,如果“条件 1”满足,就执行“那么”语句;如果“条件 1”不满足,但是满足“否则如果”“条件 2”,就执行“否则如果”下面的“那么”语句;如果上面的条件都不满足,那么执行“否则”后的语句,如图 6-5 所示。对应的 if 语句格式为:
if (条件 1):
pass elif(条件 2):
pass else:
pass

6.3 实现掷骰子游戏
6.3.1 绘制流程图
在掷骰子游戏中,如果按下 A 键,则表示开始掷骰子;如果按下 B 键,则表示显示骰子的点数。与前面几个实验一样,我们先写出这个游戏程序的伪代码。
Begin(算法开始)
变量 num (用于存储随机得到的骰子的点数) 变量 flag (作为按键标识位使用, 1 为按下 A 键,开始掷骰子; 0 为按下 B 键,显示掷骰子得到的点数) 无限循环(while) 判断变量 flag 是否为 1 如果按下按键 A,则将随机生成的 1~6 点数赋值给变量 num显示变量 num 至 LED 屏 按键 A 按下 将变量 flag 赋值为 1 按键 B 按下将变量 flag 赋值为 0 End (算法结束)
根据伪代码画出流程图,如图 6-7 所示。

6.3.2 拼插编程实现掷骰子游戏
① 打开官方网站 http://www.turnipbit.com/,点击“开始编程”按钮进入编程界面,进行基础的模块化拼插编程的学习。
② 创建一个变量用来存储所显示的数字。选择“变量”块中的“创建变量”,点击“输入变量名”,这里设为 num,如图 6-8 所示。

③ 给 num 设置一个初始值 1( num=1)。选择“赋值 num 到”(默认值为 0),然后选择“数学”块中的 和“赋值 num 到”拼插起来,修改数值为 1,如图 6-9 所示。

④ 再创建一个新变量 flag,并赋值为 1,用来标识按键,如图 6-10 所示。

⑤ 放入一个循环,条件永远为“真”,让程序一直运行。选择“循环”块中的“重复当执行”,如图 6-11 所示。然后,选择“逻辑”块中的“真”,与循环拼插对接起来,如图 6-12 所示。

⑥ 在循环体内添加执行的内容。首先逻辑判断 flag 的值,选择“逻辑”块中的“如果执行”放到循环体内,如图 6-13 所示。
⑦ 在“逻辑”块中选择“等号”,设置判断条件“ flag==1”,如图 6-14 所示。

⑧ 当 flag 为 1 时,给 num 赋值 1~6 随机数并显示。选择“变量”块中的“赋值 num 到”,再选择“数学”块中的“从 1 到 100 之间的随机整数”,与“赋值 num到”拼接,并修改为从 1 到 6 之间的随机整数,如图 6-15 所示。

⑨ 显示 num 的值。在显示之前,先将已有的显示内容清除,选择“显示”块的“清除显示内容”放到逻辑执行体的下面与其对接;选择“显示”块的“显示图像”放到“清除显示内容”下面;选择变量“ num”与“显示图像”拼插在一起,如图 6-16 所示。在这里我们要注意, num 是整数型,而前面讲过“显示图像”(display.show())只能显示字符串,所以要使用 str()函数(见图 6-19)将 num转换为字符串型,这个转换只能在代码显示区进行修改,将 display.show(num)修改为 display.show(str(num))。

⑩ 判断按键 A 是否被按下,在“显示图像”的下方添加“如果 执行 ”。在“如果”条件中处添加“按键”块中的“按键 A 被按下”,在“执行”中为 flag 赋值 1,表示重新生成随机数,如图 6-17 所示。

⑪ 继续添加“如果 执行 ”,在“如果”条件中添加“按键 B 被按下”,在“执行”中为 flag 赋值,如图 6-18 所示。

⑫ 到上一步,其实程序就已经完整了,但这时会发现运行时数字变动太快,甚至有些像乱码。这是什么原因导致的呢?其实就是显示图像这里停顿的时间太短,我们在“显示图像”下面加入“睡眠 1000 毫秒”,把 1 000 毫秒修改为 150毫秒,于是完整的代码如图 6-19 所示。

注意图中框内部分, 因为 num 为整数型, 所以需要先将 num 转换为字符串型。
⑬ 将 HEX 文件下载到 Turnipbit 中,让我们一起掷骰子吧。
【思考】
为什么 display.show 这个函数不能直接显示 num?
6.4 代码分析
6.4.1 基本原理
随机产生 1~6 整数,用来模拟骰子的 6 个面。数字不断地滚动,用来表示骰子的翻滚,通过按键来停止或开始翻滚,形成掷骰子、停止、再次掷骰子的效果。
6.4.2 逻辑分析
#代码
import random
from microbit import *
rtum = 1
fiag = 1
while True:
if flag == 1:
rum = random. randint(l, 6)
display.clear()
display.show(str(num))
sleep(150)
if button_a.is_pressed():
fiag = 1
if button_b.is_pressed():
fiag = 0
程序入口为 while 循环语句,首先进行“ if 逻辑判断”,判断变量 flag 是否为1。若变量 flag 为 1,则生成一个 1~6 的随机数并赋值给 num。然后清空当前的显示,将 num 转换为字符串并展示,延时 150 秒。接下来再进行“ if 逻辑判断”,如果按键 A 被按下, 则 flag 的值改为 1。 对按键 B 进行判断, 如果按键 B 被按下,则将 flag 的值改为 0。由此可得出结论: flag 为按键的标识位,当按键 A 被按下时,骰子进行翻滚;当按键 B 被按下时,骰子停止翻滚,即显示当前的点数。在程序中添加了清空当前屏幕显示的代码,使得程序的可读性更好。
6.5 知识要点
6.5.1 拼插编程
【掌握】
y TurnipBit 拼插编程网站的代码切换。
y 变量的创建及赋值。
y while 及判断的使用。
6.5.2 代码编程
【掌握】
if 判断语句的多种形式。
1526

被折叠的 条评论
为什么被折叠?



