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)
正在執行程式碼...
正在載入 Python 環境...
基礎隨機整數
使用 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 的必備技能
- 安全應用的關鍵技術
行業標準
- 廣泛用於生產系統
- 強大的社區支援和文檔
參考資料與資源
-
Python random Module - Official Docs
random 模組及其亂數產生器的 Python 官方文件。
-
Mersenne Twister - Wikipedia
大多數程式語言亂數函式庫背後的 Mersenne Twister 演算法。