玩轉 Python 中的隨機數

玩轉 Python 中的隨機數

開發中我們經常遇到需要隨機數的場景,比如為了用戶密碼更安全我們有時會加鹽,也就是將用戶原密碼連接上一串隨機字符然後加密保存,又比如我們可能需要隨機展示某張圖片等等。今天,我們就來理一理 Python 中的隨機數的玩法,當然,這裡只涉及標準庫。

隨機生成 0 到 1 之間的浮點數

random.random() 方法會返回 [0.0, 1.0) 之間的浮點數,注意,這是一個左閉右開的區間,隨機數可能會是 0 但不可能為 1 。

玩轉 Python 中的隨機數

隨機生成 a 與 b 之間的整數

使用 random.randint(a , b) 方法,你可以生成一個 a 與 b 之間的隨機整數,也就是 [a, b] 。

玩轉 Python 中的隨機數

當然,如果你想要生成的隨機整數不會包含 b ,也即 [a, b) , 你可以使用 random.randrange() 方法。

玩轉 Python 中的隨機數

生成 a 與 b 之間的浮點數

如果你需要生成 [a, b] 之間的隨機浮點數,那麼 random.uniform(a, b) 會滿足你的需求。

玩轉 Python 中的隨機數

從列表中隨機取出一個元素

如果你想從序列類型中隨機取出一個元素,比如列表、元祖、字符串等,random.choice() 是一個不錯的選擇。

玩轉 Python 中的隨機數

需要注意的是,該方法需要參數非空,不然會拋出 IndexError 的錯誤。

玩轉 Python 中的隨機數

打亂列表中元素的順序

使用 random.shuffle(items) 方法可以幫你把序列 items 中的元素隨機打亂。

玩轉 Python 中的隨機數

如果你不想修改原來的列表,你可以使用 copy 模塊先拷貝一份原來的列表

玩轉 Python 中的隨機數

從列表中隨機取出 n 個元素

使用 random.sample(items, n) 方法可以從序列 items 中隨機取出 n 個元素。

玩轉 Python 中的隨機數

生成密碼學安全的偽隨機數

什麼是密碼學安全的偽隨機數,請看維基百科( http://dwz.cn/7JhRN5 )。不過暫時不需要深入的話,理解為比普通隨機數更隨機的技術就好。

如果你需要生成密碼學安全的隨機數,你可以通過 random.SystemRandom 類實現。random.SystemRandom 實例化後的對象擁有與 random 類似的方法。

玩轉 Python 中的隨機數

玩轉 Python 中的隨機數

如果 Python 版本在 3.6 及以上,可以使用 secrets 模塊

通過 secrets 模塊,同樣也能生成密碼學安全的隨機數。並且,利用它生成一些特定的秘鑰特別方便。


分享到:


相關文章: