random — 你所不知道的 Python 標準函式庫用法 02

random – 產生偽隨機亂數

This module implements pseudo-random number generators for various distributions.

官方介紹文件:9.6. random — Generate pseudo-random numbers

如果要產生亂數密碼或是 token,請使用 secrets 模組絕對不要使用 random 模組來產生密碼。

亂數狀態相關

01. random.seed(a=None, version=2)

random.seed() 初始化亂數種子。a 如果是 None 則使用目前的亂數種子。a 可以是 str, bytes, bytearray, 都會被轉型成 int

02. random.getstate()

random.getstate() 取得亂數器內部狀態。

03. random.setstate(state)

random.setstate() 設定亂數器內部狀態,state需為 random.getstate() 獲得之 state。

使用範例:

整數亂數產生

01. random.randrange(stop) / random.randrange(start, stop[, step])

回傳一個 range(start, stop, step) 之中的數值。類似於 choice(range(start, stop, step)) ,可是不會真的做出一個 range object。

02. random.randint(a, b)

回傳一個整數 N (a <= N <= b)。

 

序列操作相關

01. random.choice(seq)

seq 之中回傳一個元素。如果 seq 是空的,會回傳 IndexError

02. random.choices(population, weights=None, *, cum_weights=None, k=1)

所有動物一律平等,但一些動物比其他動物更加平等。

回傳從 population 中選取 k 個元素。可以設定 weights 或是 cum_weights 來改變元素的權重。weights [10, 5, 13, 27] 跟 cum_weights [10, 15, 28, 55] 是相同的。此為重置抽樣 (sampling with replacement)。

03. random.shuffle(x[, random])

亂數洗掉 x 中的順序。random 參數可以放入 [0.0, 1.0) 的浮點數。

04. random.sample(population, k)

回傳長度為 k 且元素唯一的 list。此為非重置抽樣 (sampling without replacement)。

重置抽樣、非重置抽樣

  • Sampling with replacement: 從總體抽出一個元素後,將該元素放回總體。接著重新抽取,因此有機會抽取到相同的元素。
  • Sampling without replacement: 從總體抽出一個元素後,不會將該元素放回總體。因此不會在次抽到已抽到的元素。

使用範例:

 




如果你覺得這篇文章不錯,歡迎打賞

BTH: 35QooNA82isrmQLmpEnqXpJoxeZmaPubPf

ETH:0x4cf61fea5EA842D202B85158d8b5e239C872De46

或是點選下方圖片贊助我一杯咖啡:

2 comments On random — 你所不知道的 Python 標準函式庫用法 02

  • 您好,在Google搜尋random.choice找到您的Blog
    老師剛好有派作業就是用random.choice做出亂數密碼,可以詢問為何您不建議使用random.choice產生密碼呢?
    感謝您

    • Python random module 使用的是 PRNG,在密碼學上這樣強度並不足夠。

      如果要達到密碼學的強度的密碼,可以使用 secrets module。

      例如:


      >>> secrets.token_urlsafe()
      'Pls-bAiy8E3qHxjsPCYaGf7IMZX_7T8Z5gio0p55vnw'

Leave a reply:

Your email address will not be published.

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料