隨機數生成簡介

歡迎來到這一章!我們將探討如何讓電腦程式變得更具不可預測性。通常,電腦每次執行指令的方式都是一模一樣的。但如果你正在開發一個遊戲,想要每次出現的敵人都不同呢?或者你想模擬擲骰子?這就是隨機數生成(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)」時,請記得使用你的隨機數生成工具!