随机数生成简介

欢迎来到这一章!我们将探讨如何让计算机程序变得更具不可预测性。通常,计算机每次执行指令的方式都是一模一样的。但如果你正在开发一个游戏,想要每次出现的敌人都不同呢?或者你想模拟掷骰子?这就是随机数生成(Random Number Generation)派上用场的时候了!

如果刚开始觉得这有点神秘,别担心!读完这些笔记后,你将完全掌握如何告诉计算机“随便挑一个数字”。

什么是随机数生成?

随机数生成是指计算机程序从指定范围内选取一个数字,且过程中没有任何可预测模式的处理程序。

掷骰子类比:
想象一下掷一颗标准的六面骰子。你知道结果一定是 1 到 6 之间的数字,但在骰子停止转动前,你无法预测具体会是哪一个。在程序设计中,我们可以让计算机为我们“掷骰子”。

为什么要使用它?

  • 游戏开发:决定剑击造成的伤害值,或是在屏幕上随机出现“强化道具”的位置。
  • 模拟:建立涉及概率的现实世界模型,例如天气变化或股票市场波动。
  • 安全性:生成强大且独特的密码或加密密钥。

快速回顾:随机数生成能让程序变得更动态(dynamic)不可预测(unpredictable),而不是每次运行时都做完全一样的事情。

如何在代码中使用随机数

要使用随机数,通常需要提供计算机两项信息:最小值(minimum)最大值(maximum)

操作步骤

  1. 定义范围:决定你想要的最小值和最大值(例如:1 到 10)。
  2. 调用函数:使用你所用编程语言的专属指令来生成数字。
  3. 存储结果:将该随机数指派给一个变量(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)”时,请记得使用你的随机数生成工具!