Python模塊分析:第1節-random模塊

下一篇文章: Python模塊分析:第2節-hashlib加密模塊

random是Python產生僞隨機數的模塊,隨機種子默認爲系統時鐘。下面分析模塊中的方法:算法

一、random.randint(start,stop)

這是一個產生整數隨機數的函數,參數start表明最小值,參數stop表明最大值,兩端的數值均可以取到;segmentfault

函數算法時間複雜度爲:O(1)dom

核心源碼:函數

return self.randrange(a,b+1) #調用randrange函數來處理

實例:加密

import random

for i in range(20):
    print(random.randint(0,10),end=' ')

結果:code

1 1 7 5 10 1 4 1 0 8 7 7 2 10 6 8 6 0 3 1

二、random.randrange(start,stop,step)

也是一個隨機整數函數,參數可選orm

  • 只有一個參數時,默認隨機範圍是0到該參數,前閉後開;
  • 兩個參數時,表示最小值和最大值,前閉後開
  • 三個參數時,表示最小值,最大值和步長,前閉後開

函數算法時間複雜度:O(1)字符串

核心源代碼:get

return istart+istep*self._randbelow(n) #調用randbelow函數處理

實例:源碼

import random

for i in range(10):
    print(random.randrange(10),end=' ') #產生0到10(不包括10)的隨機數

print("")

for i in range(10):
    print(random.randrange(5,10),end=' ') #產生5到10(不包括10)的隨機數

print("")

for i in range(10):
    print(random.randrange(5,100,5),end=' ') #產生5到100(不包括100)範圍內的5倍整數的隨機數

結果:

1 1 2 4 4 3 4 6 1 4
6 6 5 7 8 9 6 6 6 5
30 50 20 40 75 85 25 65 80 95

三、random.choice(seq)

一個隨機選擇函數,seq是一個非空的集合,在集合中隨機選擇了一個元素輸出,元素的類型沒有限制。

核心源代碼:

i=self._randbelow(len(seq)) #由randbelow函數獲得隨機地下標
return seq[i]

函數算法時間負責度:O(1)

實例:

import random

list3=["mark","帥",18,[183,138]]
for j in range(10):
    print(random.choice(list3),end=' ')

代碼:

mark 帥 [183, 138] 18 mark 18 mark 帥 帥 [183, 138]

四、random.random()

這個函數造成從0.0到1.0之間的任意浮點數,左閉右開,沒有參數。

實例:

import random

for j in range(5):
    print(random.random(),end=' ')

運行結果:

0.357486615834809 0.5928029747238529 0.37053940107869987 0.3802224543848519 0.9741990956161711

五、random.send(n=None)

一個能夠對隨機數生成器進行初始化的函數,n表明隨機種子;當n=None時,隨機種子爲系統時間,當n爲其餘的數據,如int,str等時,則以提供的數據做爲隨機種子,此時生成的隨機數列固定。

實例:

import random

random.seed("mark")
for j in range(20):#不管啓動多少次程序,輸出的序列不變
    print(random.randint(0,10),end=' ')

結果:

4 1 10 5 6 2 8 5 5 10 7 2 9 6 2 6 0 5 10 10

六、random.getstate() 和 random.setstate(state):

getstate()函數用來記錄隨機數生成器的狀態,setstate(state)函數用來將生成器恢復到上次記錄的狀態。

實例:

import random

tuple1=random.getstate()#記錄生成器的狀態
for i in range(20):
    print(random.randint(0,10),end=' ')
print()
random.setstate(tuple1)#傳入參數回覆之間的狀態
for i in range(20):
    print(random.randint(0,10),end=' ')#兩次輸出的結果一致

結果:

5 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 2
5 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 2

七、random.shuffle(seq,random=None):

對傳入的集合進行亂序操做。只能針對可變序列,如字符串、列表,對於元組等不可變序列會報錯,random用來選擇亂序操做的方式,如random=random。

核心源代碼:

for i in reversed(range(1,len(x))):
    j=randbelow(i+1)
    x[i],x[j]=x[k],x[i]

函數算法的時間複雜度:O(n)

實例:

import random

lists=['mark','帥哥',18,[183,138]]
print(lists)
random.shuffle(lists,random=None)
print(lists)

結果:

['mark', '帥哥', 18, [183, 138]]
['帥哥', 18, 'mark', [183, 138]]

八、random.sample(population,k):

population參數是一個序列,如列表、元組、集合、字符串等;從集合中隨機抽取k個元素造成新的序列,不會改變原有的序列。

最壞時間複雜度:O(n*n)

實例:

import random

lists=['mark','帥哥',18,[183,138]]
lists2=random.sample(lists,3)
print(lists)
print(lists2)

結果:

['mark', '帥哥', 18, [183, 138]]
['mark', [183, 138], '帥哥']

九、random.uniform(a,b)

生成參數a到b之間的浮點數的函數,若是a>b ,則生成b到a之間的浮點數。

核心源碼:

return a+(b-a)*self.random()

時間複雜度:0(1)

實例:

import random

for i in range(5):
    print(random.uniform(10,1))

結果:

2.8826090956524606
1.5211191352548408
3.2397454278562794
4.147879756524251
6.532545391009419
下一篇文章: Python模塊分析:第2節-hashlib加密模塊
相關文章
相關標籤/搜索