2017-09-12 122 views
1

比方說,我有這樣的代碼麻煩與計算隨機次數

import random 

def fooFunc(): 
    return 1 

什麼是使用下面的代碼在正在執行的fooFunc整體機會呢?

if random.randrange(4096)==1: 
    fooFunc() 
if random.randrange(256)==1: 
    fooFunc() 
+0

你知不知道爲什麼它被稱爲隨機..而且使問題看起來像一個你不能說它麻煩 – Gahan

+0

我只是想知道如何計算fooFunc的發生整體機會..如果我只有random.randrange(4096)== 1,那麼顯然機會是1/4096,但現在我有2個randrange,fooFunc發生的整體機會是多少? – TetsuyaGR

+0

嘗試'[random.randrange(256)for x in range(300)]。count(1)'在300個隨機數列表中存在1的返回數目1;你有時可能會得到0或2或更少或更少。你不能保證結果 – Gahan

回答

2

random.randrange每個調用可以作爲獨立的隨機選擇治療,提供你不知道種子,並樂於將PRNG的輸出視爲一個隨機變量。

什麼fooFunc的整體機會正在執行?

假設你不在乎跟蹤fooFunc是否被調用兩次? 這只是正常的概率計算,類似於「當我滾動兩個骰子時滾動至少一個6的概率」。要做到這一點,將問題重新定義爲「我不滾動任何6的概率是多少」,並從1.0中減去這個問題比較容易,因爲只有一個失敗的兩個檢查組合,而有3個成功的一個或另一個或兩者的組合。

所以p = 1 - ((4095/4096) * (255/256))

+0

偉大的答案@尼爾斯萊特 –

2

我建議這不是一個Python的問題,更適合https://math.stackexchange.com/ - 詢問概率。隨着random.randrange(x)產生一個介於0和x之間的數字(包括0,但不包括x),你將有一個產生任何特定數字的1/x probability

請參閱尼爾·斯萊特的回答對您的情況來計算具體的概率。

(請在這裏看到,如果你想看看)random.randrange的內部(:How does a randrange() function work?

+0

好吧,我會的,非常感謝! – TetsuyaGR