If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

随机数字

学会如何在 ProcessingJS 中用 random() 函数来产生随机数字,并用 if 条件检查它们的值。
我们一直在使用if条件来检查环境的值,比如用户当前的鼠标位置,然后就可以根据预测来作出回应。
但如果我们想要一些不可预测的东西怎么办?如果我们想要我们的程序每一次运行的结果都不一样怎么办?
随机可以拯救你!
我们可以产生随机数,并使用 ifelse if条件,基于随机的值来改变我们的程序接下来的行为。
举例:
var randNum = random(0, 10);
if (randNum < 5) {
   text("捣蛋!", 200, 200);
} else {
   text("给糖!", 200, 200);
}
一半的时间里我们的程序会输出 "捣蛋!" ,另一半时间则输出 "给糖!" 。
他是怎么工作的的呢?
  • randNum 变量被赋值了一个随机数,包括从0到10的所有数字。返回值可以包括 0, 0.2, 3.3, 4, 5.5, 6.9, 8, 9, or 9.99,但不包括10 本身。
  • 条件判断会检查这个返回值是否小于5,成立则输出"捣蛋!" 反之则输出 "给糖!'
有时候处理整数会比浮点数更容易,所以我们可以检查精确值。 这里有一些函数可以将返回的浮点数转成整数:
  • round(): 四舍五入。如果第一位小数小于.5,则向下取整,如果大于.5则向上取整。
  • ceil(): 向上取整。
  • floor(): 向下取整。
通常我们想要生成相对均匀的随机数。例如,如果我们在模拟扔硬币,我们期望"正面"和"反面"机会均等。
下列代码实现了这个目标。
var randFlip = floor(random(0, 2));
if (randFlip === 0) {
   text("正面", 200, 200);
} else {
   text("反面", 200, 200);
}
变量randFlip总是0或1,因为它调用floor()来处理random(0, 2)的返回值。
为了让你更直观地感受这个例子,这里是关于random(0, 2)的不同的返回值去调用floor()的结果:
random(0, 2)floor(result)
0.00
0.217…0
0.542…0
0.973…0
1.01
1.332…1
1.589…1
1.999…1
random()的返回值是随机的,所以它们不一定和该表里的值的分布一致。如果你执行这个掷硬币程序10次,你可能看到全都是“正面”或全都是“反面”的结果。然而,如果你执行一千次并统计下来,你会看到“正面”和“反面”接近于各占50%。
一般来说,当我们的目标是获得一个公平均匀的整数值的分布的时候,最好是结合random()floor()
random()函数是给你的程序增加一点点变化的好方法。但是,用它的时候要小心:搞清楚你在生成的随机数的范围,再来决定你要怎么去取整,并且一定要再三检查。
在接下来的项目中, 你将有机会自己尝试一下!

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.