1. 文档中心
  2. 比卜创造 Micro:bit
  3. Python
  4. 随机

随机

有时你希望交给「运气」——让 micro:bit 随机表现,给程序一点变化。

BiBoPython 提供 random 模块,方便在代码里引入随机性。例如随机滚动显示一个名字:

from bibo import *
import random

names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan"]

display.scroll(random.choice(names))

列表 names 里有七个字符串名字。最后一行是嵌套(前面讲过的「洋葱」效果):random.choice 从 names 里随机挑一项,再作为 display.scroll 的参数。

把列表改成你们班或小组同学的名字试试!

随机数

随机数非常实用,游戏里尤其常见——不然骰子有什么用呢?

BiBoPython 提供多种随机数方法。做一个简单骰子:

from bibo import *
import random

display.show(str(random.randint(1, 6)))

每次复位 micro:bit,都会显示 1 到 6 之间的一个整数。random.randint 返回两个参数之间(含两端)的整数。因为 display.show 需要字符,所以用 str 把数字转成字符串(例如 6 变成 "6")。

若你只需要 0 到 N 之间的整数,可以用 random.randrange。只传一个参数时,返回小于 N 的随机整数(不含 N 本身——这与 random.randint 的行为不同)。

有时需要带小数点的数,叫浮点数,用 random.random 生成,返回值在 0.0 到 1.0 之间(含 0.0,不含 1.0)。若要更大的随机浮点数,可以把 random.randrange 和 random.random 相加:

from bibo import *
import random

answer = random.randrange(100) + random.random()
display.scroll(str(answer))

混沌的种子

计算机用的随机数生成器并不是「真随机」,而是给定一个起始种子后,产生看起来像随机的序列。种子常来自当前时间或芯片内置传感器等「近似随机」的数据。

有时你又需要可重复的随机行为——每次「掷骰」都得到同一组结果。这可以通过设置种子实现:已知种子时,随机序列每次都相同。用 random.seed 传入任意整数即可。下面这版骰子程序每次运行结果都一样:

from bibo import *
import random

random.seed(1337)
while True:
    if button_a.was_pressed():
        display.show(str(random.randint(1, 6)))

能想到为什么这里要按按钮 A,而不是像第一个骰子例子那样靠复位设备吗?(提示:复位会重新启动程序;若每次启动都执行 random.seed(1337),序列又从同一点开始。按按钮是在同一次运行里多次取随机数。)