python隨機數(轉載)

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

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

 

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

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

 

固然,若是你想要生成的隨機整數不會包含 b ,也即 [a, b) , 你可使用 random.randrange() 方法。安全

 

生成 a 與 b 之間的浮點數

若是你須要生成 [a, b] 之間的隨機浮點數,那麼 random.uniform(a, b) 會知足你的需求。dom

 

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

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

 

 

須要注意的是,該方法須要參數非空,否則會拋出 IndexError 的錯誤。函數

 

打亂列表中元素的順序

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

 

 

若是你不想修改原來的列表,你可使用 copy 模塊先拷貝一份原來的列表orm

 

 

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

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

 

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

 

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

若是你須要生成密碼學安全的隨機數,你能夠經過 random.SystemRandom 類實現。random.SystemRandom 實例化後的對象擁有與 random 相似的方法。

 

若是 Python 版本在 3.6 及以上,可使用 secrets 模塊

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

下面是一些簡單的例子

 

 

經過這個模塊比較字符串相等,還能夠減小被時序攻擊的風險。

 

什麼是時序攻擊呢,我這找了一個通俗的解釋

舉一個最簡單的計時攻擊的例子,某個函數負責比較用戶輸入的密碼和存放在系統內密碼是否相同,若是該函數是從第一位開始比較,發現不一樣就當即返回,那麼經過計算返回的速度就知道了大概是哪一位開始不一樣的,這樣就實現了電影中常常出現的按位破解密碼的場景。密碼破解複雜度成千上萬倍甚至百萬千萬倍的降低。

(文字來源知乎,侵刪)

關於secrets 模塊的更多介紹,請看官方文檔( https://docs.python.org/3/library/secrets.html )

 

轉載自:http://baijiahao.baidu.com/s?id=1596465591200328534&wfr=spider&for=pc

相關文章
相關標籤/搜索