python随机数(转载)
隨機(jī)生成 0 到 1 之間的浮點(diǎn)數(shù)
random.random() 方法會(huì)返回 [0.0, 1.0) 之間的浮點(diǎn)數(shù),注意,這是一個(gè)左閉右開的區(qū)間,隨機(jī)數(shù)可能會(huì)是 0 但不可能為 1 。
隨機(jī)生成 a 與 b 之間的整數(shù)
使用 random.randint(a , b) 方法,你可以生成一個(gè) a 與 b 之間的隨機(jī)整數(shù),也就是 [a, b] 。
當(dāng)然,如果你想要生成的隨機(jī)整數(shù)不會(huì)包含 b ,也即 [a, b) , 你可以使用 random.randrange() 方法。
生成 a 與 b 之間的浮點(diǎn)數(shù)
如果你需要生成 [a, b] 之間的隨機(jī)浮點(diǎn)數(shù),那么 random.uniform(a, b) 會(huì)滿足你的需求。
從列表中隨機(jī)取出一個(gè)元素
如果你想從序列類型中隨機(jī)取出一個(gè)元素,比如列表、元祖、字符串等,random.choice() 是一個(gè)不錯(cuò)的選擇。
需要注意的是,該方法需要參數(shù)非空,不然會(huì)拋出 IndexError 的錯(cuò)誤。
打亂列表中元素的順序
使用 random.shuffle(items) 方法可以幫你把序列 items 中的元素隨機(jī)打亂。
如果你不想修改原來的列表,你可以使用 copy 模塊先拷貝一份原來的列表
從列表中隨機(jī)取出 n 個(gè)元素
使用 random.sample(items, n) 方法可以從序列 items 中隨機(jī)取出 n 個(gè)元素。
生成密碼學(xué)安全的偽隨機(jī)數(shù)
什么是密碼學(xué)安全的偽隨機(jī)數(shù),請(qǐng)看維基百科( http://dwz.cn/7JhRN5 )。不過暫時(shí)不需要深入的話,理解為比普通隨機(jī)數(shù)更隨機(jī)的技術(shù)就好。
如果你需要生成密碼學(xué)安全的隨機(jī)數(shù),你可以通過 random.SystemRandom 類實(shí)現(xiàn)。random.SystemRandom 實(shí)例化后的對(duì)象擁有與 random 類似的方法。
如果 Python 版本在 3.6 及以上,可以使用 secrets 模塊
通過 secrets 模塊,同樣也能生成密碼學(xué)安全的隨機(jī)數(shù)。并且,利用它生成一些特定的秘鑰特別方便。
下面是一些簡(jiǎn)單的例子
通過這個(gè)模塊比較字符串相等,還可以減少被時(shí)序攻擊的風(fēng)險(xiǎn)。
什么是時(shí)序攻擊呢,我這找了一個(gè)通俗的解釋
舉一個(gè)最簡(jiǎn)單的計(jì)時(shí)攻擊的例子,某個(gè)函數(shù)負(fù)責(zé)比較用戶輸入的密碼和存放在系統(tǒng)內(nèi)密碼是否相同,如果該函數(shù)是從第一位開始比較,發(fā)現(xiàn)不同就立即返回,那么通過計(jì)算返回的速度就知道了大概是哪一位開始不同的,這樣就實(shí)現(xiàn)了電影中經(jīng)常出現(xiàn)的按位破解密碼的場(chǎng)景。密碼破解復(fù)雜度成千上萬倍甚至百萬千萬倍的下降。
(文字來源知乎,侵刪)
關(guān)于secrets 模塊的更多介紹,請(qǐng)看官方文檔( https://docs.python.org/3/library/secrets.html )
轉(zhuǎn)載自:http://baijiahao.baidu.com/s?id=1596465591200328534&wfr=spider&for=pc
總結(jié)
以上是生活随笔為你收集整理的python随机数(转载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 籍贯是什么意思(简历中的籍贯一栏怎么填)
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?