python随机数模块_python 随机数模块 -- random
一、概述
這個模塊實現的偽隨機數生成器。
對于整數,從區間選取。對于序列,隨機元素。
在實線的,有功能來計算均勻分布,正態分布(高斯) ,對數正態分布,負指數,γ和β分布。對于生成的角度分布,馮·米塞斯的分布是可用的。
幾乎所有的模塊功能依賴于基本功能隨機的( ) ,它生成一個隨機浮點均勻的半開區間[ 0.0 , 1.0 ) 。 Python使用Mersenne扭曲為核心的發電機。它產生53位精度浮點值,周期為2**19937-1 。 C語言底層實現是快速和線程。梅森倍捻機是最廣泛的測試,隨機數生成器的存在之一。然而,作為完全確定性的,所以不適合用于所有目的,并且是完全不適合加密的目的。
該模塊提供的功能實際上是必然的random.Random類的隱藏的實例的方法。你可以實例化你自己隨機的情況下獲得的發電機不共享狀態。這對于多線程程序特別有用,創建隨機的為每個線程使用不同的實例,并使用jumpahead ( )方法,使之有可能看到每個線程生成的序列不重疊。
在這種情況下,覆蓋隨機的有getstate ( )的setstate ()和jumpahead ( )方法:隨機類也可以,如果你想使用你自己設計的不同的基本生成子類?;蛘?#xff0c;一種新型的發電機可以提供一個getrandbits ( )方法 - 這讓randrange ( )產生的選擇了一個任意大的范圍內。
random.getstate()
返回對象捕獲發生器的當前內部狀態。這個對象可以傳遞給setstate()來恢復狀態
random.setstate(state)
狀態應該已經從以前的調用中獲得getstate(),以及setstate()恢復發生器的getstate()被調用的時候的內部狀態。
random.getrandbits(k)
返回具有k隨機位的一個Python整數。這種方法是與梅森旋轉算法發生器供給和其他一些發生器也可以提供它作為API的可選部分。如果可用,getrandbits()使randrange()來處理任意大的范圍。
random.randrange([start], stop[, step])
random.randrange的函數:從指定范圍內,按指定基數遞增的集合中 獲取一個隨機數。如:random.randrange(10, 100, 2),結果相當于從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數。random.randrange(10, 100, 2)在結果上與 random.choice(range(10, 100, 2) 等效。
importrandom
r= random.randrange(10,100,2)print (r) #14
random.randint(A,B)
返回一個隨機整數N使得一個<= N <= B。也可寫作randrange(A,B + 1)
r = random.randint(1,10)print(r) #8
random.choice()
random.choice從序列中獲取一個隨機元素。其函數原型為:random.choice(sequence)。參數sequence表示一個有序類型。這里要說明 一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬于sequence。有關sequence可以查看python手冊數據模型這一章。下面是使用choice的一些例子:
>>>random.choice(‘abcdefghij’) #Single random element#‘c’
>>>weighted_choices = [(‘Red’, 3), (‘Blue’, 2), (‘Yellow’, 1), (‘Green’, 4)]>>>population = [val for val, cnt in weighted_choices for i in range(cnt)] #列表生成式
>>>population#[‘Red’, ‘Red’, ‘Red’, ‘Blue’, ‘Blue’, ‘Yellow’, ‘Green’, ‘Green’, ‘Green’, ‘Green’]
>>>random.choice(population)#‘Green’
random.shuffle()
random.shuffle的函數原型為:random.shuffle(x[, random]),用于將一個列表中的元素打亂。如:
>>>p =[“studying”,”python”,”makes”,”me”,”fun”]>>>random.shuffle(p) #亂序
>>>print(p)#結果: [‘fun’, ‘python’, ‘studying’, ‘makes’, ‘me’]
random.sample()
random.sample的函數原型為:random.sample(sequence, k),從指定序列中隨機獲取指定長度的片斷。sample函數不會修改原有序列。
li=[1,2,3,4,5,6,7,8,9,10,11,12,13]
s= random.sample(li,2)print(s) #[7, 11]
s= random.sample(li,5)print(s) #[2, 3, 9, 13, 12]
s= random.sample("asddsfsf",3)print(s) #['f', 'd', 's']
random.random()
返回范圍為[0.0,1.0)的下一個隨機浮點數。
print(random.random) #
print(random.random()) #0.9765901824412893
random.uniform(A,B)
返回一個隨機浮點數N使得一個<= N <= b的要<= B和B <= N <=一對B
print(random.uniform(1,10)) #2.4537297196491257
print(random.uniform) #>
洗牌:
>>>items = [1, 2, 3, 4, 5, 6, 7]>>>random.shuffle(items)>>>print(items) #[7, 3, 2, 5, 6, 4, 1]
練習1 : 寫函數生成一個6位數的驗證碼
def get_code(n=6):
code= ""
for i inrange(n):
num= random.randint(0,9)
code+=str(num)returncodeprint(get_code())
結果
練習2 : 寫函數生成一個包含數字,小寫字母和大寫字母的驗證碼
提示:ascii碼 A-Z為 65-90,a-z為97-122
def get_code(n=6):
code= ""
for i inrange(n):
num= str(random.randint(0,9))
alpha_upper= chr(random.randint(65, 90))
alpha_lower= chr(random.randint(97,122))
c=random.choice([num,alpha_lower,alpha_upper])
code+=creturncodeprint(get_code())
結果
練習3 :?寫一個發紅包函數,接受兩個參數:金額 個數,每個人取到錢的幾率是一樣的
importrandomdef lucky_money(money,num): #傳入金額和個數
ret = random.sample(range(1,money*100),num-1)
ret.sort()
ret.insert(0,0)
ret.append(money*100)for i in range(len(ret)-1):
money= ret[i+1] -ret[i]yield money/100
for money in lucky_money(200,15): 傳入參數,循環取出所有值print(money)
發紅包1
importrandomdefbouns(money,amount):whileamount:if amount == 1:yield float("%.2f" %money)else:
money1=random.uniform(0,money)
money2= random.uniform(1/amount,3/amount)*money1
money-= float("%.2f" %money2)yield float("%.2f" %money2)
amount-= 1g= bouns(200,10)print(list(g))
發紅包2
總結
以上是生活随笔為你收集整理的python随机数模块_python 随机数模块 -- random的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《新奥特曼》票房创纪录 小岛秀夫晒影评:
- 下一篇: 最高精度“线虫大脑”来了:蠕动前行 高精