随机函数

有时你想让事情偶然发生,或者稍微打乱顺序,也就是希望设备产生随机行为。

MicroPython 有一个 random 模块可以为你的代码引入随机性和“小混乱”。比如,下面就是显示屏上随机显示姓名的实现方式:

from microbit import *
import random

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

display.scroll(random.choice(names))

(names) 列表包含7个字符串定义的姓名,最后一行是 嵌套 (之前介绍过的 “洋葱” 效果 ): random.choice 方法以 names 列表为参数,返回一个随机被选择的数据项,而这个数据项(被随机选择的姓名)则是 display.scroll 的参数。

你能把自己的姓名列表添加到上面的列表中吗?

随机数字

随机数字非常有用,在游戏中很常见。不然,为什么我们要用骰子呢?

MicroPython有几个很有用的生成随机数字的方法。下面我们做一个简单的骰子:

from microbit import *
import random

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

每次设备重置时,都会显示一个1和6之间的数字。你已经开始熟悉 嵌套 了,因此需要注意的是 random.randint 返回两个参数之间的自然数 (自然数也称为整数类型 - 因此是方法的名称)。 请注意,由于 display.show 需要一个字符,所以我们调用 str 函数将数值转换为字符(例如,将 6 转换为 "6")。

如果你一直需要在 0N 之间取值,可以引用 random.randrange 方法。 如果给它一个参数,它将返回随机整数直到参数 N 但不包括参数 N 的值(这与 random.randint 的实现方式不同)。

有时你需要一个带有小数点的数字,这些数字被称为 浮点 数,可以通过 random.random 方法生成,这只会返回 0.01.0 之间的值。 如果你需要更大的随机浮点数,像下面这样,可以添加 random.randrangerandom.random 的结果:

from microbit import *
import random

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

随机中的“种子”值

计算机生成随机数字都是伪随机。通过给定初始 种子 值,然后给出随机数。种子值通常由随机数产生,例如当前时间和/或传感器(比如内置芯片中的温度计)的读数。

有时你会需要实现重复随机行为-可再生随机来源。这就像是说每次掷骰子,都会有五面相同的值。

通过设置 种子 值,这很容易实现。给定已知种子值后,随机数字生成器会产生相同的数字组。种子值可由 random.seed 和任意自然数设定。这个骰子类型总是产生相同的结果:

from microbit import *
import random

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

你能解释下这个程序为什么需要我们按下按钮A而不是像第一个骰子示例一样重置设备吗?