python標準庫random模塊處理隨機數(shù)
前言
random模塊實現(xiàn)了各種分布的偽隨機數(shù)生成器。
偽隨機數(shù):人類使用算法等方式,以一個基準(也被稱為種子,常用的是時間戳)來構造一系列數(shù)字,這些數(shù)字的特性符合人們所理解的隨機數(shù)。
一旦算法和種子都確定,產(chǎn)生的隨機數(shù)序列也是確定的,所以稱為偽隨機數(shù)。
1. 常用函數(shù)
常用函數(shù) | 說明 |
---|---|
random.seed(a) | 設置初始化隨機種子,可輸出相同隨機數(shù)序列;a取整數(shù)或浮點數(shù),不設置時默認以系統(tǒng)時間為種子 |
random.random() | 生成一個0.0到1.0之間的隨機浮點數(shù) |
random.uniform(a,b) | 生成一個[a,b]之間的隨機小數(shù),a,b取整數(shù)或浮點數(shù) |
random.randint(a,b) | 生成一個[a,b]之間的隨機整數(shù) |
random.randrange(start,stop[,step]) | 生成一個[start,stop)之間以step為步數(shù)的隨機整數(shù);start,stop,step都是整數(shù),step不設置默認為1 |
random.getrandbits(k)(seq) | 生成一個占內(nèi)存k位以內(nèi)的隨機整數(shù);k取長度的整數(shù)值 如果設置k=2,那么可取的數(shù)就在 (0,1,2,3) 之間隨機取 |
random.choice(seq) | 從序列類型seq中隨機返回一個元素;seq是序列類型,如:字符串、列表、元組、集合等 |
random.shuffle(seq) | 將序列類型中元素隨機排序,返回打亂后的序列,seq被改變(改變原列表);seq是序列類型,如:字符串、列表、元組等 |
random.sample(pop,k) | 從pop中選取k個元素,以列表類型返回(不改變原列表);pop是序列類型,k是整數(shù)表示取k個數(shù) |
常用函數(shù)使用方法:
import random print('no seed') for i in range(5): ret = random.randint(1,10) print(ret) print() print(random.random()) print(random.uniform(1,10)) print(random.randint(0,10)) print(random.randrange(1,10,5)) print(random.getrandbits(2)) print(random.choice([1,3,5,7,9])) l=[1,2,3,4] random.shuffle(l) print(l) print(random.sample(l,2)) print('*'*40) print('has seed') random.seed(1) for i in range(5): ret = random.randint(1,10) print(ret) print(random.random()) print(random.uniform(1,10)) print(random.randint(0,10)) print(random.randrange(1,10,5)) print(random.getrandbits(2)) print(random.choice([1,3,5,7,9])) l=[1,2,3,4] random.shuffle(l) print(l) print(random.sample(l,2))
顯示結果:
no seed
4
7
5
5
1
()
0.730177834774
4.05987712407
8
6
0
7
[1, 4, 2, 3]
[4, 1]
****************************************
has seed
2
9
8
3
5
0.449491064789
6.8643367545
8
1
0
9
[1, 3, 4, 2]
[4, 1]
2. 不常用函數(shù)
random模塊中不常用的函數(shù)有如下:
函數(shù)名 | 說明 |
---|---|
random.getstate() | 捕獲并返回生成器當前內(nèi)部狀態(tài)的對象,可以把它傳遞給setstate()函數(shù)來把生成器內(nèi)部狀態(tài)恢復到調(diào)用getstate()函數(shù)之前的狀態(tài),相當于備份 |
random.setstate(state) | state應該是getstate()函數(shù)的結果,用來把生成器當前的內(nèi)部狀態(tài)恢復為state |
random.betavariate(alpha,beta) | Beta分布:參數(shù)的條件是alpha>0和beta > 0,返回值的范圍介于0和1之間 |
random.expovariate(lambd) | 指數(shù)分布 |
random.gammavariate(alpha,beta) | Gamma分布:參數(shù)的條件的alpha > 0 & beta < 0 |
random.gauss(mu,sigma) | 高斯分布: mu是平均值,sigma是標準差 |
random.normalvariate(mu,sigma) | 正態(tài)分布:mu是平均值,sigma是標準差 |
random.paretovariate(alpha) | 帕累托分布:alpha是形狀參數(shù) |
random.weibullvariate(alpha,beta) | 威布爾分布:alpha是比例參數(shù),beta是形狀參數(shù) |
3. 使用示例
3.1 生成隨機密碼
生成的密碼包含數(shù)字和字母,可以指定密碼的位數(shù)。
# -*- coding: utf-8 -*- """ @File : 隨機生成密碼.py @E-Mail : zoya.zh@qq.com """ import random import string def get_random_passwd(length:int): ''' 生成隨機密碼h :param length: 密碼的長度 :return: 生成的隨機密碼 ''' num_count = random.randint(1,length-1) # 密碼中數(shù)字的個數(shù) char_count = length - num_count # 密碼中字母的個數(shù) num_list = [random.choice(string.digits) for i in range(num_count)] # 隨機生成的數(shù)字 char_list = [random.choice(string.ascii_letters) for i in range(char_count)] # 隨機生成的字母 psw = num_list + char_list # 隨機排列序列中的字符 random.shuffle(psw) # 把得到的密碼轉成字符串的格式返回 result = ''.join(psw) return result if __name__ == '__main__': psw = get_random_passwd(8) print(psw)
測試時每次都會生成不同的密碼
8oG4GW76
261Ro923
到此這篇關于python標準庫random模塊處理隨機數(shù)的文章就介紹到這了,更多相關python random模塊 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python腳本實現(xiàn)數(shù)據(jù)導出excel格式的簡單方法(推薦)
下面小編就為大家?guī)硪黄猵ython腳本實現(xiàn)數(shù)據(jù)導出Excel格式的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Python多線程經(jīng)典問題之乘客做公交車算法實例
這篇文章主要介紹了Python多線程經(jīng)典問題之乘客做公交車算法,簡單描述了乘客坐公交車問題并結合實例形式分析了Python多線程實現(xiàn)乘客坐公交車算法的相關技巧,需要的朋友可以參考下2017-03-03python類中super()和__init__()的區(qū)別
這篇文章主要介紹了python類中super()和__init__()的區(qū)別,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2016-10-10