第3章 编程基础 本章重点学习控制程序流程,以及循环和分支结构的编程方法。 (1)了解变量、值、类型、结构体、随机函数的基本概念。 (2)掌握while和for循环、if语句的程序编写。 在编写复杂程序时,需要用到变量并进行程序流程控制,控制程序流程包括循环和 分支。 3.1 变 量 常量是在某一变化过程中,始终保持不变的量,例如一天有24小时、圆周率约为3.14 等。变量是在某一变化过程中,可以取不同数值的量。例如,用公式S=πr2 求各种半径的 圆面积,这里π是常量,S 和r 是变量。 在Mu编辑器中输入 from microbit import * 单击REPL按钮,在REPL窗口中输入语句 score=0 图3.1 变量score 表示这是一个名字为score,值为0的变量。在此之后, Python只要看到score,就会用值0来替换score。 继续输入 print (score) 结果如图3.1所示。 Python是顺序执行命令的,在使用变量score之前 必须先给它赋值,否则会报错。 开源智能硬件开发案例教程 26 ...................... .............. 如果想改变变量score的值,只需要给它赋一个新值,如score=1,当再次执行print (score)后,2所示。 结果如图3. 图3.赋新值 2 .................. .......... .... .................. 小贴士.................................................................................... 变量的概念基本上与初中代数的方程变量是一致的,只是在计算机程序中,变量不 仅可以是数字,还可以是任意数据类型。 变量名必须是大小写英文、数字和下画线的组合,但不能用数字开头,不能使用 .... .................................................................................... Python关键字( 如if、for等)。 Python的命名习惯是使用小写字母,用下画线将单词分开,如high_score=100 。变量 的值可以是数字,也可以文字。甚至可以把同一个变量轮换赋值成数字和文字,如图3. 所示。当然,变量的当前值只能是一种类型。 3 图3.变量的值为数字或文字 3 3.值和类型 2 当人们看到数字8时,不会关心它究竟是文字,还是数字。在Python中,每个数据都 有特定的类型,这样Python才知道该如何处理。通过type() 函数就可 以看到Python数据的类型,4所示。 如图3. 图3.4中,第1行的8是int(整数integer的简写)数据类型,第3 行中的8是str(字符string的简写)数据类型,Python认为整数8和字图3.数据类型 4 符8是不同的,它们的运算结果如图3. 5所示。 27 第3章 编程基础........ .............. 图3.第1行将两个数字8加在一起, 8"合并在一起。 5中, 而第3行却是将两个字符" 由此可见,区分值的类型非常重要, 将会得到非常有意思的结果。图3. 如果出错,6显示更 多的类型。 图3.不同数据类型的运算图3.浮点数和布尔类型 56 图3.第1行输出的是floa一个浮点数表示一个实数,小数点位置不固定), 第36中, t( e)。 行输出的是bool(布尔类型,只有两个值:True和Fals 1. 数值 数据的具体类型决定了Python可以执行哪些操作,数值(包括int和float类型)可以 有两种操作类型:比较和数值操作。 (1)比较。比较需要两个操作数, ool型,1所示。 返回值为b如表3. 表3.数值类型的比较操作 1 操作含义示例 < 小于9<8(False) > 大于9>8(True) == 等于9==9(True) <= 小于或等于9<=9(True) >= 大于或等于9>=10(False) != 不等于9!=10(True) 可以在Python解释器中输入任何操作符进行验证,2所示 7 。 所示。 如图3. (2)数值操作。数值操作返回一个数值类型,如表3. 表3.数值操作 2 操作含义示例 + 加2+2==>4 -减3-2==>1 * 乘2*3==>6 / 除10/5==>2 % 求余5%2==>1 ** 乘方4**2==>16 int() 转换为int型int(3.2)==>3 float() 转换为float型float(3)==>3.0 .......... ..28.. 开..源..智..能..硬..件..开..发..案..例教..程.. 在程序中使用数值运算,通常都将其返回值赋值给某个变量,如图3.7所示。 图3.7 操作符验证与数值操作 2.字符串 字符串类型可以保存任何文字,包括单个数据和一组字母。创建字符串只需要将数据 用“'”或者“""”括起来即可。在Python中,两者都可以。首选后者,因为它可以处理含有 “'”的字符串。 .................................................................................... .................................. .................................................................................... .................................. 在Python3中,字符串的编码格式为Unicode,因此Python的字符串支持多种语言。 当源代码中包含中文时,就必须指定保存为UTF-8编码,通常在文件开头写上以 下两行: #!/usr/bin/env python3 #-*-coding: utf-8-*- 其中,第一行注释是为了告诉Linux或MacOSX系统,这是一个Python可执行程序。 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则在源代码中 写的中文输出可能会有乱码。 此外,还要确保文本编辑器正在使用UTF-8编码。 小贴士.......... .... .... .......... 与数值类型相似,Python提供了一些字符串操作方法,如表3.3所示。图3.8是在 Python解释器中的部分结果。 表3.3 字符串操作 操 作含 义示例 string[x] 获取第x+1个字符"abcde"[1]==>"b" string[x:y] 获取所有从x+1到y 的字符"abcde"[1:3]==>"bc" string[:y] 获取从字符串开始到第y个的字符"abcde"[:3]==>"abc" string[x:] 获取从第x+1个开始到字符串结束的字符"abcde"[3:]==>"de" len(string) 返回字符串长度len("abcde")==>5 string+string 合并两个字符串"abc"+"def"==>"abcdef" 注:在Python中,计数从0开始,所以对应人类语言变为x+1。 第 3章 编程基础 29 ........ .............. 图3.字符串操作验证 8 3. 布尔值 布尔类型非常简单,只有True和False两种取值。 ............................ .......... .... ............................ 小贴士.................................................................................... 在Python中,这两个值的首字母要大写,并且不需要任何引号。 这两个值通常不存在变量中。 它们通常用于条件语句(如if)的判断条件中,其主要操作符是与(and)、或(or)和 非(not)。 ● 非:简单地取值转换。 ● 与:需要两个操作数,如果两个数都为真,则返回真,否则,返回假。 ● 或:也需要两个操作数,如果两个数中任何一个为真,则返回真。 .... .................................................................................... True和False的操作结果如图3. 9所示。 图3.非与或操作验证 9 4. 数据类型转换 使用函数int()、float() 和str() 可以转换数据类型。它们分别将其他数据类型转换为 整数、浮点数和字符串。但是它们相互之间不能随意转换,如果将浮点数转为整数,Python 将舍去所有小数部分。 当字符串中只有一个字符时,才能转换成数字,而其他类型几乎都可以转换成字符串。 开源智能硬件开发案例教程 30 ...................... .............. 3.结构体 3 除了简单数据类型,Python还允许将数据用不同方式组合起来创建结构体。 1. 列表和元组 最简单的结构体是sequences(线性结构), 它将信息一个接一个地存储起来,sequences 分为两类:list(列表)和tuple(元组)。 list(列表)是一种有序的集合,可以随时添加和删除其中的元素。tuple(元组)与list 非常类似,但是tuple一旦初始化就不能修改。 用“[]”将数字括起来可构成列表,用“()”将数字括起来可构成元组。在结构体名后面 跟“[]”,并在其中填入下标就可以访问单个元素。 注意:下标从0开始,因此list_1[0]和tuple_1[0]可以访问线性结构中的第一个元素。 大多数情况下,列表和元组是相似的, 10 所示。 如图3. 图3.t与te相似处 10 lisupl 但是,在更新元素时就会发现列表和元组之间的差别:可以更新列表中的单个元素, 但不能更新元组中的单个元素,如图3. 11 所示。 图3.t与te更新单个元素时的差别 11 lisupl 如果想更新元组中的单个元素,可以在一次性覆盖元组中的所有元素时,告诉Python 将变量tuple_1赋一个新值以取代旧值, 12 所示。 3,部分操作如图3. 如图3. 字符串的操作符可以用于列表和元组,具体方法参考表3.13 所示。 图3.pe更新元素图3.t与tpe的字符串操作 12 tul13 lisul 2. 列表操作方法 列表的操作方法如表3. 4所示。 第3章 编程基础 31 ........ .............. 表3.列表操作方法 4 操作含义示例 list.append(item) 添加元素到列表尾部list_1.append(0) list.extend(list_2) 合并list_2到列表尾部list_1.extend([0,-1]) list.insert(x,item) 插入元素到第x+1 个位置list_1.insert(1,88) list.sort() 排序列表list_1.sort() list.index(item) 返回列表中第一次出现该元素的位置list_1.index(0) list.count(item) 计算列表中该元素出现的次数list_1.count(0) list.remove(item) 删除列表中第一次出现的该元素list_1.remove(0) list.pop(x) 返回并删除第x+1 个元素list_1.pop(1) 注:在Python中,计数从0开始,所以对应人类语言多为x+1 。 前7个操作的结果如图3.14 所示,它们中有些返回一个值,有些改变了list_1的值,有 些改变了元素的顺序。 图3.列表操作结果 14 pop(x)比较特殊,首先,它返回列表中第x+1 个位置的元 素值,随后从列表中删除该元素, 15 所示。 如图3. 3. 元组操作方法 元组除了不能被修改外,其他与列表非常类似。所有对列 表的操作方法,只要不改变元素的值,都可以用于元组;如果改 图3.p(的操作结果 变了元素的值,则出现错误信息, 16 所示。 15 pox) 如图3. 图3.对元组的操作 16 4. 字典 列表和元组是元素的集合,每个元素都对应了其中的一个下标。在列表["a","b", .......... ..32.. 开..源..智..能..硬..件..开..发..案..例教..程.. "c","d"]中,a的下标是0,b的下标是1,以此类推。 如果要创建一个数据结构,把学号与名字关联起来,就要用到字典(dictionary,简称 dict)。Python内置的字典使用键-值(key-value)存储,具有极快的查找速度。 .................................................................................... ........................ .................................................................................... ........................ dict的实现原理和查字典是一样的。 假设字典包含了1万个汉字,要查某个字时,一种办法是把字典从第一页往后翻, 直到找到想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。 第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到 该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加 而变慢。dict就是用第二种实现方式。 小贴士.......... .... .... .......... 在Python中,可以使用通过“{}”来定义的字典,如图3.17所示。 图3.17 定义字典 字典中的元素称为键值对,其中第一部分是键(key),第二部分是值(value)。只需要 给定一个新键及其对应的值,就可以在字典中添加新元素,如图3.18所示。 图3.18 添加新元素 .................................................................................... ........................ .................................................................................... ........................ dict的特点如下: ● 查找和插入的速度极快,不会随着key的增加而变慢。 ● 需要占用大量的内存,内存浪费多。 list的特点如下: ● 查找和插入的时间随着元素的增加而增加。 ● 占用空间小,浪费内存很少,所以dict是用空间来换取时间的一种方法。 小贴士.......... .... .... .......... 5.集合 与列表和元组使用下标、字典使用键不同,Python的集合(set)允许将一堆数据放在一 起而不用指定下标或序号。 集合set和字典dict的唯一区别仅在于没有存储对应的value,Python用于集合的操 作方法如表3.5所示。 第3 章 编程基础........ ..3 3............ 表3.5 集合操作方法 操 作含 义 iteminset_1 测试给定的值是否在集合中 set_1&set_2 返回两个集合共有的元素 set_1|set_2 合并两个集合中的元素 set_1-set_2 set_1中存在set_2中不存在的元素 set_1^set_2 set_1或set_2中存在的元素,不包括两个集合共有的元素 对两个集合herbs和spices的上述操作结果如图3.19所示。 图3.19 集合操作结果 3.4 控制程序流程 控制程序流程包括循环和分支。 如果需要让程序等待某事件发生,就需要围绕一段代码定义循环,这段代码定义了如 何对某些预期事件(例如按下按钮)作出反应。 3.4.1 while 循环 while循环是一种最简单的循环,关键字while用来判断条件是否为真。如果是,它会 运行一个代码块,这个代码块称为循环体;如果不是,则中断循环(忽略这个循环体),程序 的其余部分继续执行。 如果条件始终为真,它将一直循环下去,直到条件为假,如图3.20所示是一个简单的 例子。 图3.20 while循环 .......... ..34.. 开..源..智..能..硬..件..开..发..案..例教..程.. .................................................................................... ................................ .................................................................................... ................................ 条件后面要加上“:”,接下来的一行要缩进,所有缩进部分都属于循环体。 要在REPL中运行这段代码,必须在输入print语句之后按回车(Enter)键,然后按 退格(Backspace)键删掉自动产生的tab(缩进),最后再按回车键。 图3.20中的矩形框部分就是用退格键删掉缩进的部分。 最后按回车键是告诉Python循环体结束并执行这段代码。 这段代码会陷入死循环,不断地执行print()语句。按Ctrl+C键可以将其终止。 为了不陷入死循环,通常需要一个或多个变量在循环内部改变判断条件,使程序最 终能够跳出循环。 小贴士.......... .... .... .......... 【例3.1】 while循环。 编写程序,代码如下: from microbit import * while running_time()<10000: display.show(Image.ASLEEP) display.show(Image.SURPRISED) .................................................................................... ................................ .................................................................................... ................................ 函数running_time()的作用是在设备启动后返回时间(单位:毫秒)。 语句whilerunning_time()<10000检查运行时间是否小于1×104ms(10s)。 如果是,则属于事件执行范围,设备将会显示Image.ASLEEP(睡眠)。 若运行时间大于或等于1×104ms,即running_time()小于1×104ms,while条件 不成立。 在这种情况下,循环终止,程序将会继续执行while 循环之后的代码块,显示 Image.SURPRISED。 看起来像是设备休眠10s后,露出“惊喜”的表情。 小贴士.......... .... .... .......... 单击“刷入”按钮,10s前与10s后在micro:bit上显示结果如图3.21所示。 【例3.2】 动画-闪烁的星星。 夏天的晚上,人们经常看到天上的星星闪闪发光,非常好看。联欢晚会的舞台上,灯光 配合舞者的动作闪烁的效果赏心悦目。如何通过micro:bit实现闪烁的效果呢? 由于在图案库里面没有星星的图案,所以必须自己绘制,星星的图像绘制出来后,如何 实现闪烁呢? 第3 章 编程基础........ ..3 5............ 图3.21 while循环中的条件判断 把闪烁的现象通过慢动作来分析后会发现,星星闪烁实际上就是星星亮一段时间灭一 段时间;同时,它不是闪烁一次就结束了,所以就需要使用循环让它一直执行下去。 编写程序,代码如下: from microbit import * while True: star=Image("00900:" "09990:" "99999:" "09990:" "00900") display.show(star) sleep(2000) display.clear() sleep(2000) .................................................................................... .................. .................................................................................... .................. 永久循环语句whileTrue的使用: 如果要运行某代码块,while会检查该事件是否为True,由于True事件永久为 True,这样,一个永久循环就实现了。 display的clear方法将LED显示屏中每个像素的亮度置0(将灯熄灭)。 小贴士.......... .... .... .......... 单击“刷入”按钮,“闪烁的星星”效果如图3.22所示。 (1)如果不用clear方法,该如何实现相应的功能呢? (2)如果不把灯熄灭,而是显示相似的图案,效果又怎么样呢? 复习思考题 开源智能硬件开发案例教程 36 ...................... .............. 图3.永久循环 22 3.4.2 for 循环 for循环可以用来遍历数据,它在每次循环中实现对每个数据的处理, 23 所示。 如图3. 图3.r循环代码与执行结果 23 fo 循环中,g(x,遍历x~y-1的每个数据。 rany) rang(y,ang x,z)的第三个参数z,可以设定两个连续数字之间的间隔。例如把re(1,6) 改成range(1,6,2), 它将只计算1~5的所有奇数;把range(1,6)改成range(2,6,2), 它将 只计算1~5的所有偶数, 24 所示。 如图3. 图3.e第三个参数的作用 24 rang 3.4.3 分支语句 Python使用分支来控制程序流,使其根据不同条件,分别执行不同的代码。分支由if 语句实现。 第3 章 编程基础........ ..3 7............ .................................................................................... ................................ .................................................................................... ................................ 类似while循环,if语句的执行只需要一个布尔类型的条件,它后面还可以有附加 语句,如elif(elseif的缩写)和else语句。 if语句可以不带elif或else。 如果没有else语句,同时判断条件也不成立,Python就会跳过if语句,不执行其中 的任何代码。 一个if语句最多只执行一段代码,只要Python发现条件为真,就执行该段代码并 结束整个if语句。 如果没有一个条件为真,则执行else后面的代码段。 小贴士.......... .... .... .......... 如果希望MicroPython对按下按钮事件做出反应,应该把它放入一个永久循环并检查 按钮是否is_pressed(被按下)。 【例3.3】 指示按钮。 做一个方向指示按钮,实现按下左边的按钮(按钮A)指向左边,按下右边的按钮(按钮 B)指向右边,不按的时候,没有指示。 编写程序,代码如下: from microbit import * while True: if button_a.is_pressed(): display.show(Image.ARROW_W) elif button_b.is_pressed(): display.show(Image.ARROW_E) 单击“刷入”按钮,效果如图3.25所示。 图3.25 指示按钮 【例3.4】 按钮检测。 编写程序,显示按下了哪个按钮。 .......... ..38.. 开..源..智..能..硬..件..开..发..案..例教..程.. from microbit import * while True: if button_a.is_pressed() and button_b.is_pressed(): display.scroll("AB") break elif button_a.is_pressed(): display.scroll("A") elif button_b.is_pressed(): display.scroll("B") sleep(100) .................................................................................... ............................ .................................................................................... ............................ Python中可以使用逻辑运算符与(and)、或(or)、非(not)来检查多重判断语句。 非运算就是简单地转换取值;与运算需要两个操作数,如果两个操作数都为真,则 返回真,否则,返回假;或运算也需要两个操作数,如果两个操作数中任何一个为真,则 返回真。 程序代码中的and表示与运算,即按钮A 与按钮B同时按下。 break的作用是跳出上一层的循环而执行该循环后面的语句。 通常break语句总是与if语句连在一起,即满足条件时便跳出循环。 小贴士.......... .... .... .......... 单击“刷入”按钮,分别按下按钮A 和按钮B的效果如图3.26所示,当同时按下按钮A 和B时,滚动显示AB。 图3.26 按钮检测 代码中,将break放置在“A”或“B”语句的下面会发生什么情况? 复习思考题 【例3.5】 忧伤的宠物。 编写程序,代码如下: 第3 章 编程基础........ ..3 9............ from microbit import * while True: if button_a.is_pressed(): display.show(Image.HAPPY) elif button_b.is_pressed(): break else: display.show(Image.SAD) display.clear() .................................................................................... ........................ .................................................................................... ........................ is_pressed方法仅产生两个结果:True或False,按下按钮后,系统要么返回True, 要么返回False。 这只宠物总是很悲伤,显示“悲伤”的表情,除非按下按钮A,当按钮A 被按下时, 永久循环显示“高兴”的表情。 当按钮B被按下时,通过break语句终止该循环。 循环终止后,执行循环外的display.clear()语句,对显示屏做clear(清除)。 小贴士.......... .... .... .......... 单击“刷入”按钮,效果如图3.27所示。 图3.27 按钮检测 玩过这个游戏后,有什么办法改善这个游戏? 复习思考题 【例3.6】 倒计时器。 在每年除夕的夜晚,都会有很多地方举行春节倒计时活动;又如,商家经常举办促销活 动倒计时以及红绿灯倒计时等。虽然它们表现的方式不太一样,但都属于倒计时器。 想要实现倒计时,就需要一个变量,通过它不断改变数值并显示出来,实现倒计时数的 改变。如果倒计时的数超过1位数的话,就需要移动显示,不利于观察。下面制作一个简 .......... ..40.. 开..源..智..能..硬..件..开..发..案..例教..程.. 单的9~0的倒计时器。 编写程序,代码如下: from microbit import * shijian=9 while True: display.show(shijian) sleep(2000) shijian=shijian-1 if shijian==0: display.show(Image.HAPPY) sleep(5000) shijian=9 .................................................................................... .................. .................................................................................... .................. 程序开始时设置变量shijian,并给它赋初始值9(倒计时从9开始)。 在循环中,每隔2s,变量shijian的值减少1(实现倒计时)。 通过if语句判断变量shijian的值是否为0,如果为0则显示“笑脸”。 等待5s之后,把变量shijian重新设置为9,重新开始倒计时,一直这样循环进行。 小贴士.......... .... .... .......... 单击“刷入”按钮,倒计时从9开始,到0显示“笑脸”图案,不断循环显示,部分效果图 如图3.28所示。 图3.28 倒计时器的部分状态 (1)如何实现0~9的正计时? (2)如何实现不是开机就从数字9开始,而是按下按键A 之后才会从9开始, 之后一直重复执行? 复习思考题 第 3章 编程基础 41 ........ .............. 3.4.4 循环嵌套 在进行程序编写时,经常会遇到需要同时遍历多种数据的情况,这时就要用到循环 嵌套。 .......... .............. .............. 小贴士.................................................................................... 编写循环嵌套时要注意缩进级别: 第一个循环体的缩进为1,第二个循环体的缩进为2。只有这样,Python才能理解 哪些代码属于第几个循环体以及每个循环体在何处结束。 .... .... .................................................................................... 在REPL 窗口中输入如图3.29 所示的程序,用来找出1~10 中的所有素数。 按退格键后再按回车键,结果如图3. 30 所示。 图3.29 找出110 的所有素数的程序30 找出1~ ~图3.10 的所有素数 .......... ...................... ...................... .................................................................................... 小贴士.................................................................................... .... .... 运行嵌套循环时可能会使程序变慢: 例如计算3000 以内的素数(只需要将上述程序第一行中的10 改成3000 即可), 程 序运行就会用非常长的时间。 这是因为外层循环要循环上千次,每次进入内层循环也需要执行很多次。 如果正在做这个实验,会发现整个程序运行起来很慢。 如果不想等待,可以按Ctrl+C 键停止运行。通过下面的方法可以改进该程序:首先 使用range(1,3000,2)跳过所有的偶数,这样就直接省去一半时间;其次,在if里面增加语 句bk,一旦发现某个数字是非素数,就使用bk跳出循环,继续执行下面一行(_ reareaifisprime:)。程序如图3. 31 所示。 .......... ..42.. 开..源..智..能..硬..件..开..发..案..例教..程.. 图3.31 程序优化 3.5 随机函数 随机性意味着无法准确预测。比如,在玩骰子的时候,人们不知道会看到6个面上的 哪个点数;再如,在抽奖的时候,主持人从抽奖箱里随便抽取一个数字,拿到同样数字的观 众就中奖了。这样的数字就是随机数。 如果想让事情偶然发生或者稍微打乱顺序,就需要使用随机函数产生随机行为。 MicroPython的random 库(模块)可以引入随机性,只要使用代码importrandom 即可。 下面通过一个简单的例子进行说明。 【例3.7】 随机数字。 编写程序,代码如下: from microbit import * import random display.show(str(random.randint(1, 6))) .................................................................................... ........................ .................................................................................... ........................ MicroPython 有几个很有用的生成随机数字的方法,包括random.randint、 random.randrange、random.random 等: random.randint(a,b):返回两个参数a、b 之间的自然数N (a≤N ≤b)。 random.randrange(N ):返回0~N 的自然数(不包含N )。 random.random 生成一个带小数点的数字,返回0.0~1.0的浮点数。 随机数种子用于生成伪随机数的初始数值,通过random.seed实现。 小贴士.......... .... .... .......... 如何产生大于1的随机浮点数? 复习思考题 【例3.8】 随机骰子。 骰子是中国古代民间娱乐用来投掷的博具,早在战国时期就有。在游戏时经常会用到 第3 章 编程基础........ ..4 3............ 骰子,如麻将、牌九。另外,有很多桌游都以骰子的点数来决定任务角色行走的步数。最常 见的骰子有6个面,它是一个正立方体,每面分别有1~6个点(或数字),其相对两面的数 字之和为7。 想要实现随机骰子,首先需要一个能够产生1~6的随机数,然后每一个数对应骰子的 一面,把对应的图案通过LED点阵显示出来;同时,每次产生随机数之前,需要通过按钮被 按下来触发实现。 编写程序,代码如下: from microbit import * import random number1=Image("00000:" "00000:" "00900:" "00000:" "00000") number2=Image("00000:" "00900:" "00000:" "00900:" "00000") number3=Image("00000:" "09000:" "00900:" "00090:" "00000") number4=Image("00000:" "09090:" "00000:" "09090:" "00000") number5=Image("00000:" "09090:" "00900:" "09090:" "00000") number6=Image("09090:" "00000:" "09090:" "00000:" "09090") .......... ..44.. 开..源..智..能..硬..件..开..发..案..例教..程.. while True: if button_a.was_pressed(): temp=random.randint(1, 6) if temp==1: display.show(number1) elif temp==2: display.show(number2) elif temp==3: display.show(number3) elif temp==4: display.show(number4) elif temp==5: display.show(number5) elif temp==6: display.show(number6) .................................................................................... .............. .................................................................................... .............. 通过Image自定义1~6点的骰子。 设置变量temp,用于放置产生的随机数。 根据变量temp的值,显示对应的骰子。 小贴士.......... .... .... .......... 单击“刷入”按钮,按下按钮A 产生随机骰子,部分效果图如图3.32所示。 图3.32 随机掷骰子 (1)如何实现随机显示√和×? (2)用点阵显示石头剪刀布,然后两位同学进行游戏,看谁获胜的次数多? 复习思考题 【例3.9】 燃烧的火焰。 编写程序,代码如下: from microbit import * import random i=Image("00000:"*5)