熱線電話:13121318867

登錄
首頁精彩閱讀Random庫產生的數真的是隨機的么?
Random庫產生的數真的是隨機的么?
2022-06-07
收藏

作者:小K

來源:麥叔編程

Random庫產生的數真的是隨機的么?

Ramdom模塊是Python中最令人所知的模塊之一,每當代碼中需要“隨機”這個概念的時候,我們就會下意識輸入:

import random

但大家有沒有產生過疑慮,Random模塊為什么能生成出的數真的是隨機的嗎?

它又是靠什么原理產生出來的?

今天花三分鐘來研究下這兩個問題。

關于真隨機和假隨機

真隨機:完全無法預判規律。(筆者覺得,應該不存在“真隨機”的值)

假隨機:看似無法預判規律,其實存在一種算法。

Random庫產生的數真的是隨機的么?

電腦是人類智慧的結晶,那當然電腦的一切行為,人類都是應該可控的,包括電腦產生的“隨機數”。

其實電腦產生的隨機數,是使用固定的算法,通過一個種子數作為變量生成隨機數。

假如我們已經知道了隨機生成的數和種子數就可能獲得接下來隨機數序列的信息,這就是假隨機數的可預測性。

驗證random產生的數是假隨機數

在上文我說了“如果已經知道隨機生成的數和種子數就可能獲得接下來隨機數序列的信息?!?

那么我們知道了算法和種子數,我們是不是可以得到固定的“假隨機”數呢?

import random

random.seed(666) # 注入種子數666 # 隨機產生10個100以內的數 for n in range(10): print(random.randint(1,100))

運行上文的代碼后,我得到的輸出結果是:

59 49 56 37 65 2 71 71 100 92 

屏幕前的你試試看,是不是得出來的數跟我一樣?

在很多情況下,這個種子數會用時間戳替代,這樣生成出來的數更像是隨機的。

后記

“隨機”這個概念在生活中也經常被應用到,例如一些搖獎系統,抽簽系統...

如果是電腦控制操作,那么上述的Bug也必然是存在的,所以如何更隨機地選取一個種子數變得尤為關鍵,例如某市的小汽車搖號系統都會先在社會上隨機抽取大眾監督員,再由大眾監督員通過抽簽的方式,手動從一個箱子中抽取一個種子數。

Random庫產生的數真的是隨機的么?

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢