Python 隨機數產生器

學習如何使用 Python 產生隨機數,包含交互式程式碼範例。使用 random、secrets 和 numpy 模組即時執行程式碼並查看結果。

需要快速產生隨機數?

試試我們的在線隨機數產生器,無需編寫任何程式碼即可獲得即時結果。

打開隨機數產生器

Python 程式碼編輯器

學習如何使用 Python 產生隨機數,包含交互式程式碼範例。使用 random、secrets 和 numpy 模組即時執行程式碼並查看結果。

import random

# Generate random integers between min and max
min_val = 1
max_val = 100
quantity = 5

# Generate multiple random numbers
numbers = [random.randint(min_val, max_val) for _ in range(quantity)]
print(f"Random numbers: {numbers}")

輸出

Pyodide(Python 到 WebAssembly)

正在執行程式碼...

基礎隨機整數

使用 random.randint() 在指定範圍內產生隨機整數。這是最常用的通用隨機數產生方法。

理解 Python 隨機數產生

Python 提供多種產生隨機數的方法,每種方法適用於不同的使用場景。random 模組使用基於 Mersenne Twister 演演演演算法的偽隨機數產生(PRNG),而 secrets 模組提供加密安全的隨機數,適用於密碼產生和安全令牌。

random

random 模組提供快速的偽隨機數產生,適用於模擬、遊戲和一般程式設計任務。

secrets

secrets 模組使用 os.urandom() 產生加密安全的隨機數,適用於密碼產生、安全令牌和認證系統。

numpy

NumPy 的隨機模組提供高效的基於陣列的隨機數產生,非常適合科學計算、資料分析和大規模模擬。

常見使用場景

遊戲和模擬

使用 random.randint() 或 random.choice() 產生隨機骰子點數、抽牌、戰利品掉落和遊戲事件。

安全和密碼學

使用 secrets 模組建立安全密碼、API 密鑰、會話令牌和加密鹽值。

資料科學和統計

使用 numpy.random() 產生用於測試、統計採樣和蒙特卡洛模擬的隨機資料集。

軟體測試

建立隨機測試資料和邊界情況,確保健壯的程式碼覆蓋率和錯誤檢測。

Python 隨機數產生工作原理

Python 的 random 模組使用 Mersenne Twister 演演演演算法,這是一種廣泛使用的偽隨機數產生器(PRNG)。它產生看似隨機但實際上基於初始種子值確定性的數字序列。

secrets 模組在 Python 3.6 中引入,使用 os.urandom() 訪問作業系統的加密隨機性源。這提供了適用於安全敏感應用的真正隨機性。

NumPy 的隨機模組構建在 Mersenne Twister 的 C 實現之上,提供快速的向量化操作,高效產生大量隨機數陣列。

注意:所有程式碼執行都在瀏覽器中使用 Pyodide(編譯為 WebAssembly 的 Python)完成。沒有程式碼或資料會發送到我們的伺服器,確保完全的隱私和安全。

Python 隨機數產生專家提示

🔄

使用種子實現可重復性

使用 random.seed(42) 設定種子值以獲得可重復的結果。對於調試和科學實驗至關重要。

🔒

安全最佳實踐

始終使用 secrets 模組產生密碼、API 密鑰和安全令牌。切勿將 random 用於加密目的。

⚡

使用 NumPy 提升性能

對於產生大量隨機數陣列,NumPy 比使用 random 模組的列表推導式快得多。

技術規格

演演演演算法

  • Mersenne Twister(random 模組)
  • os.urandom()(secrets 模組)
  • NumPy Mersenne Twister(C 實現)

性能

  • random: 約 100 萬數字/秒
  • secrets: 約 10 萬數字/秒(由於 OS 調用較慢)
  • numpy: 約 1000 萬 + 數字/秒(向量化)

最佳使用場景

  • random: 遊戲、模擬、一般程式設計
  • secrets: 密碼、令牌、加密
  • numpy: 資料科學、大規模模擬

常見問題

涵蓋了哪些 Python 模組?

內建 random 模組、用於安全工作的 Secrets 模組以及用於數組友好生成的 numpy。

我可以執行頁面上的範例嗎?

可以。該頁面會載入瀏覽器內的 Python 運行時,因此您可以編輯和運行每個程式碼片段並查看真實輸出。

我應該使用哪個模組來儲存令牌或密碼?

使用機密。隨機模組適用於模擬和遊戲,但在加密方面不安全。

我的程式碼在伺服器上運行嗎?

不。執行發生在瀏覽器環境中,因此您輸入的任何內容都不會上傳。

如何在 Python 中產生 1 到 10 之間的隨機整數?

使用 random.randint(1, 10),它會回傳 1 到 10 之間(含兩端點)的整數。若需要相同範圍的浮點數,請呼叫 random.uniform(1, 10)。你可以在本頁的互動式範例中直接編輯並執行這段程式碼。

Python 的隨機數是真正的隨機嗎?

不是。random 模組採用具有 53 位元浮點數精度的梅森旋轉演算法(Mersenne Twister)偽隨機產生器,因此輸出是確定性的,不適合用於密碼學。對於密碼、權杖或金鑰等安全性敏感的值,請使用 secrets 模組,它會從作業系統的加密安全隨機來源取得隨機性。

如何讓每次執行程式碼時都得到相同的隨機數?

在產生數值前呼叫 random.seed(42) 或任何固定的整數。設定種子會將梅森旋轉演算法(Mersenne Twister)設為可重現的狀態,因此 randint、random、shuffle 和 choice 在每次執行時都會回傳相同的序列。這對於測試、除錯以及重現機器學習或模擬實驗至關重要。

numpy 產生隨機數的速度比 random 模組快嗎?

可以,而且快非常多。像是 np.random.randint(1, 101, size=1000000) 這樣的單次呼叫,會以向量化運算一次產生一百萬個整數,避免 randint 每個值所需的緩慢 Python 迴圈。當你需要數千到數百萬個隨機數進行模擬、抽樣或統計分析時,請使用 numpy。

為甚麼學習 Python 隨機數產生?

🎯

多樣化方法

  • 多種模組滿足不同需求
  • 從簡單遊戲到加密應用
  • 易於學習,功能強大
💼

實際應用

  • 用於資料科學和機器學習
  • 測試和 QA 的必備技能
  • 安全應用的關鍵技術
🌟

行業標準

  • 廣泛用於生產系統
  • 強大的社區支援和文檔

參考資料與資源