Python 中的 random 模組詳解:新手指南

更新日期: 2024 年 9 月 25 日

在 Python 編程中,隨機數 的生成是許多應用程序的重要組成部分,例如遊戲開發、模擬測試和加密等。

Python 提供了一個強大的內建模組——random,用於生成各種類型的隨機數。

對於剛開始學習 Python 的新手來說,理解並掌握 random 模組的用法,將大大拓展你的編程能力。

本文將詳細介紹 Python 中的 random 模組,包括其基本用法、常用函數和實際應用,並提供豐富的示例,幫助你在實際開發中靈活運用。


random 模組的基本概念

什麼是 random 模組?

random 模組是 Python 的標準庫之一,提供了一系列生成隨機數的函數。

這些隨機數可以是整數、浮點數,甚至是從序列中隨機選擇的元素。

為什麼需要隨機數?

隨機數在許多領域都有應用,包括但不限於:

  • 遊戲開發:如骰子、撲克牌的隨機生成。
  • 模擬和測試:用於生成測試數據或模擬現實情況。
  • 安全和加密:生成隨機密鑰和安全令牌。

導入 random 模組

在使用 random 模組之前,需要先導入它。

import random

random 模組的常用函數

生成隨機浮點數

random()

  • 功能:返回一個介於 0.0 到 1.0 之間的隨機「浮點數」。

示例:

import random

num = random.random()
print(num)

輸出:

0.6394267984578837  # 輸出結果會每次不同

uniform(a, b)

  • 功能:返回一個介於 a 和 b 之間的隨機「浮點數」。

示例:

num = random.uniform(1.5, 6.5)
print(num)

輸出:

3.8926568387590883  # 輸出結果會每次不同

生成隨機整數

randint(a, b)

  • 功能:返回一個介於 a 和 b 之間的隨機「整數」,包括 a 和 b。

示例:

num = random.randint(1, 10)
print(num)

輸出:

7  # 輸出結果會每次不同

randrange(start, stop[, step])

  • 功能:從指定範圍內,以指定間隔返回一個隨機整數,不包含 stop。

示例:

num = random.randrange(0, 10, 2)
print(num)

輸出:

4  # 輸出結果會每次不同,可能為 0、2、4、6、8

隨機選擇元素

choice(seq)

  • 功能:從非空序列(如列表、元組、字串)中隨機返回一個元素。

示例:

fruits = ['apple', 'banana', 'cherry', 'date']
fruit = random.choice(fruits)
print(fruit)

輸出:

banana  # 輸出結果會每次不同

choices(population, weights=None, k=1)

  • 功能:從 population 中隨機選擇 k 個元素,返回一個列表。可以設置權重(weights)。

示例:

colors = ['red', 'green', 'blue']
selected_colors = random.choices(colors, weights=[5, 1, 1], k=3)
print(selected_colors)

輸出:

['red', 'green', 'red']  # 輸出結果會每次不同,'red' 出現的機率較高

sample(population, k)

  • 功能:從 population 中隨機選擇 k 個不重複的元素,返回一個列表。

示例:

numbers = list(range(1, 50))
lottery_numbers = random.sample(numbers, 6)
print(lottery_numbers)

輸出:

[7, 14, 22, 35, 42, 48]  # 輸出結果會每次不同

打亂序列

shuffle(seq)

  • 功能:就地打亂序列的順序。

示例:

cards = ['A', '2', '3', '4', '5']
random.shuffle(cards)
print(cards)

輸出:

['3', 'A', '5', '2', '4']  # 輸出結果會每次不同

5. 其他函數

gauss(mu, sigma)

  • 功能:返回一個符合高斯分佈(正態分佈)的隨機浮點數。

示例:

num = random.gauss(0, 1)
print(num)

輸出:

-0.8261223347411677  # 輸出結果會每次不同

設置隨機種子

為什麼要設置隨機種子?

在計算機中,我們使用 隨機數生成器 來產生隨機數。然而,計算機本質上是確定性的機器,無法產生真正的隨機數。

種子(seed)是一個初始值,提供給隨機數生成器的算法。種子決定了隨機數序列的起點。

如果你在程式中設定了相同的種子,那麼每次運行時,隨機數生成器都會從同一個起點開始,按照相同的算法步驟,生成完全相同的數字序列。

雖然這些數字看起來是隨機的,但在設定相同種子的情況下,它們是可預測且一致的。

使用 seed() 函數

示例:

random.seed(42)
print(random.randint(1, 10))
print(random.randint(1, 10))

輸出:

10
1

如果再次運行這段代碼,輸出結果將保持不變。


實際應用示例

猜數字遊戲

import random

secret_number = random.randint(1, 100)
attempts = 0

print("猜數字遊戲!我選了一個 1 到 100 之間的數字。")

while True:
    guess = int(input("請輸入您的猜測:"))
    attempts += 1
    if guess < secret_number:
        print("太小了!")
    elif guess > secret_number:
        print("太大了!")
    else:
        print(f"恭喜你,猜對了!總共猜了 {attempts} 次。")
        break

模擬擲骰子

import random

def roll_dice():
    return random.randint(1, 6)

print(f"你擲出了 {roll_dice()} 點。")

從列表中隨機選擇學生

import random

students = ['Alice', 'Bob', 'Charlie', 'David', 'Eva']
selected_student = random.choice(students)
print(f"被選中的學生是:{selected_student}")

注意事項

1. 隨機性和安全性

  • random 模組適用於一般的隨機需求,如遊戲和模擬。
  • 不適用於安全相關的隨機數生成,如加密密鑰。
  • 對於安全相關的用途,請使用 secrets 模組。

示例:

import secrets

secure_number = secrets.randbelow(100)
print(secure_number)

效能考量

  • 大量隨機數生成:在需要生成大量隨機數的情況下,可以考慮使用第三方庫,如 NumPy。

常見錯誤與解決方案

IndexError: list index out of range

問題:

在使用 choice() 或 sample() 時,如果序列為空,會引發錯誤。

解決方案:

在使用前檢查序列是否為空。

items = []
if items:
    selected_item = random.choice(items)
else:
    print("序列為空,無法選擇。")

重複選擇元素

問題:

使用 choices() 時,可能會出現重複元素。

解決方案:

如果不希望有重複元素,使用 sample()。


結論

Python 的 random 模組提供了豐富的隨機數生成函數,能夠滿足大多數應用的需求。

透過掌握這些函數的用法,你可以輕鬆地在程式中引入隨機性,從而增加趣味性和實用性。

建議:

  • 多加練習:嘗試編寫一些小遊戲或模擬程式。
  • 閱讀官方文檔:深入了解每個函數的參數和行為。
  • 注意安全性:在需要安全隨機數的情況下,使用專門的模組。

延伸閱讀

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *