随机数生成简介
欢迎来到这一章!我们将探讨如何让计算机程序变得更具不可预测性。通常,计算机每次执行指令的方式都是一模一样的。但如果你正在开发一个游戏,想要每次出现的敌人都不同呢?或者你想模拟掷骰子?这就是随机数生成(Random Number Generation)派上用场的时候了!
如果刚开始觉得这有点神秘,别担心!读完这些笔记后,你将完全掌握如何告诉计算机“随便挑一个数字”。
什么是随机数生成?
随机数生成是指计算机程序从指定范围内选取一个数字,且过程中没有任何可预测模式的处理程序。
掷骰子类比:
想象一下掷一颗标准的六面骰子。你知道结果一定是 1 到 6 之间的数字,但在骰子停止转动前,你无法预测具体会是哪一个。在程序设计中,我们可以让计算机为我们“掷骰子”。
为什么要使用它?
- 游戏开发:决定剑击造成的伤害值,或是在屏幕上随机出现“强化道具”的位置。
- 模拟:建立涉及概率的现实世界模型,例如天气变化或股票市场波动。
- 安全性:生成强大且独特的密码或加密密钥。
快速回顾:随机数生成能让程序变得更动态(dynamic)且不可预测(unpredictable),而不是每次运行时都做完全一样的事情。
如何在代码中使用随机数
要使用随机数,通常需要提供计算机两项信息:最小值(minimum)与最大值(maximum)。
操作步骤
- 定义范围:决定你想要的最小值和最大值(例如:1 到 10)。
- 调用函数:使用你所用编程语言的专属指令来生成数字。
- 存储结果:将该随机数指派给一个变量(variable),以便稍后在程序中使用。
不同语言的示例
虽然具体指令不同,但背后的逻辑是一样的。以下是 AQA 课程支持的三种语言中的写法:
Python:
import random
my_number = random.randint(1, 6)
(这会选出一个 1 到 6 之间包含边界的整数。)
C#:
Random dice = new Random();
int roll = dice.Next(1, 7);
(注意:在 C# 中,上限值通常是“不包含”的,意即 dice.Next(1, 7) 会在 1 到 6 之间选取。)
VB.NET:
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))
AQA 伪代码(Pseudo-code)
在考试中,你可能会看到类似这样的伪代码写法:
number ← RANDOM_INT(1, 6)
你知道吗?
计算机本质上是“逻辑”机器,因此要做到真正随机是非常困难的!大多数计算机使用复杂的数学来建立伪随机数(pseudo-random numbers)。对人类来说它们看起来是随机的,尽管聪明的计算机在理论上是可以预测它们的。不过,针对 AQA 课程大纲,你并不需要了解它们背后的数学原理,只需要知道如何使用它们即可!
常见错误
即使是专业程序员有时也会犯这些错误:
- 差一错误(Off-by-one errors):忘记“最大值”是否包含在范围内。例如,如果你想要 1 到 10 之间的数字,请务必确认你的代码不会在 9 就停止了!
- 忘记存储数值:如果你生成了随机数却没有将其存入变量,你就无法在程序后续的逻辑决策中使用它。
- 可预测的“种子(Seeds)”:如果你没有正确设置随机生成器,每次重新启动程序时,它可能会选出完全相同的“随机”数字。
记忆小撇步:记住 "RSV" — Range(设定范围 min/max)、Select(调用函数)、Variable(存储结果到变量)!
总结与重点提示
必记要点:
- 随机数生成用于使程序变得不可预测。
- 你必须为数字定义一个范围(起始点与结束点)。
- 结果必须存储于变量中。
- 考试中,你不需要知道计算机生成这些数字的内部算法。
核心总结:每当题目要求你“模拟(simulate)”、“随机选取(pick at random)”或“建立机会(create a chance)”时,请记得使用你的随机数生成工具!