亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python使用random和tertools模塊解一些經典概率問題

系統 1810 0

random 模塊中的常用函數

復制代碼 代碼如下:

random()
返回一個位于區間 [0,1] 內的實數;
uniform(a, b)
返回一個位于區間 [a,b] 內的實數;
randint(a, b)
返回一個位于區間 [a,b] 內的整數;
choice(sequence)
返回一個位于 sequence 中的元素,其中,sequence 為一個有序序列,如 list、string 或者 tuple 等類型;
randrange([start], stop[, step])
等效于 choice(range([start], stop[, step]));
shuffle(sequence [, random])
無返回值,用于打亂 sequence 中元素的排列順序;
sample(sequence, n)
返回一個由 n 個 sequence 中的元素組成的分片,其中,sequence 也可以是 set 類型。

利用 itertools 得到排列、組合

復制代碼 代碼如下:

permutations(sequence, k))
從序列 sequence 中得到包含 k 個元素的所有排列。

combinations(sequence, k))
從序列 sequence 中得到包含 k 個元素的所有組合。

羊車門問題

有一個抽獎節目,臺上有三扇關閉的門,一扇門后面停著汽車,其余門后都是山羊,只有主持人知道每扇門后面是什么。參賽者可以選擇一扇門,在開啟它之前,主持人會開啟另外一扇門,露出門后的山羊,然后允許參賽者更換自己的選擇。問題是:參賽者更換選擇后能否增加贏得汽車的機會?

有很多時候,我們并不知道自己的理論分析正確與否,但如果知道概率論中的 大數定律,又碰巧懂一點編程,無疑可以利用計算機重復模擬事件以求解問題。該問題的 Python 3.x 解答程序如下:

復制代碼 代碼如下:

from random import *

def once(doors = 3):??# 一次事件的模擬
?car = randrange(doors)?# 一扇門后面停著汽車
?man = randrange(doors)?# 參賽者預先選擇一扇門
?return car == man?# 參賽者是否最初就選擇到車

h = 0?# 堅持選擇贏得汽車的次數???????????????????
c = 0?# 改變選擇贏得汽車的次數
times = int(1e6) # 重復實驗的次數

for i in range(times):
?if once():?h += 1
?else:??c += 1

print("維持選擇:",h/times*100,"%\n改變選擇:",c/times*100,"%")

運行結果:

維持選擇: 33.268 %
改變選擇: 66.732 %

撲克牌問題

概率論給我們帶來了很多匪夷所思的反常結果,條件概率尤其如此。譬如:

四個人打撲克,其中一個人說,我手上有一個 A。請問他手上有不止一個 A 的概率是多少?
四個人打撲克,其中一個人說,我手上有一個黑桃 A。請問他手上有不止一個 A 的概率又是多少?

復制代碼 代碼如下:

from random import *

cards = [i for i in range(52)]
counter = [0, 0, 0, 0]

def once(): # 0 表示黑桃 A
?global cards
?ace = set(sample(cards, 13)) & {0,1,2,3}
?return len(ace), 0 in ace

for i in range(int(1e6)):
?a, s = once() # a 表示 A 的個數, s 表示是否有黑桃 A
?if a:
??counter[1] += 1
??if s:?counter[3] += 1
?if a > 1:
??counter[0] += 1
??if s:?counter[2] += 1

print('情況一:', counter[0]/counter[1], '\n情況二:', counter[2]/counter[3])

運行結果:

情況一: 0.3694922900321386
情況二: 0.5613778028656186

有趣的事情出來了:如果這個人宣布了手中 A 的花色,他手中持有多個 A 的概率竟然會大大增加??蛇@又該如何理解呢?

一個家庭中有兩個小孩,已知其中一個是女孩,求另一個小孩也是女孩的概率

網絡上每一次有人發帖提出與條件概率有關的悖論時,總會引來無數人的圍觀和爭論,哪怕這些問題的實質都是相同的。本題目無疑是爭論的最多的問題之一。

說起來網上的分析都像模像樣,一些原本都迷糊的人被人講的暈頭轉向,一會覺得這個對,一會又覺得那個對?,F在我不給你分析那些道理,就用計算機來模擬問題,讓你直接得到結論,而毋須明白個中緣由。

復制代碼 代碼如下:

from random import * # 0 表示女孩,1 表示男孩

family = (lambda n :[{randrange(2),randrange(2)} for i in range(n)])(int(1e6))

both = family.count({0}) # 都是女孩的家庭數
exist = len(family) - family.count({1}) # 有女孩的家庭數

print(both/exist)


運行結果:
復制代碼 代碼如下:

0.33332221770186543

沒有那些深奧的分析過程,寥寥數行代碼就得到了問題的答案,想必這也是計算機引入數學計算與證明的好處。

生日悖論

每個人都有生日,偶爾會遇到與自己同一天過生日的人,但在生活中這種緣分似乎并不常有。我們猜猜看:在 50 個人當中出現這種緣分的概率有多大,是 10%、20% 還是 50%?

復制代碼 代碼如下:

from random import *

counter, times = 0, int(1e6)
for i in range(times):
?if len({randrange(365) for i in range(50)}) != 50: # 存在同一天生日的人
??counter += 1

print('在 50 個人中有相同生日的概率為:',counter/times)


運行結果:
復制代碼 代碼如下:

在 50 個人中有相同生日的概率為: 0.970109

在 50 個人中有相同生日的概率高達 97%,這個數字恐怕高出了絕大多數人的意料。我們沒有算錯,是我們的直覺錯了,科學與生活又開了個玩笑。正因為計算結果與日常經驗產生了如此明顯的矛盾,該問題被稱為「生日悖論」,它體現的是理性計算與感性認識的矛盾,并不引起邏輯矛盾,所以倒也算不上嚴格意義上的悖論。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青青青手机在线视频观看国产 | 精品久久久久久无码中文字幕 | 一级片视频网站 | 欧美亚洲综合在线 | 久久精品视频8 | 高清在线亚洲精品国产二区 | 九操网 | 婷婷色中文网 | 99精品国产综合久久久久 | 一级毛片a女人刺激视频免费 | 免费观看成人碰视频公开 | 日韩综合nv一区二区在线观看 | 殴美毛片 | 4hu影院永久在线播放 | 午夜久久久久久网站 | 免费视频国产 | 精品一区二区三区四区 | 国产一区二区三区免费 | 亚洲国产精品久久精品成人 | 国产一级一片免费播放i | 亚洲国产成人久久笫一页 | 国产成年视频 | 国产成人精品久久综合 | 国产精品久久久久久久久久直 | 欧洲亚洲综合一区二区三区 | 亚洲不卡视频在线 | 曰本女人色黄网站 | 成人国产亚洲 | 欧美一级黄色片在线观看 | 亚洲国产视频一区 | 波多野结衣一区二区三区高清在线 | 色女影院 | 欧美国产中文 | 有码中文字幕在线观看 | 国产在线精彩视频二区 | 天堂成人在线 | 99久久综合精品国产 | 又刺激又黄的一级毛片 | 欧美13一16sex 性 | 久久久亚洲欧洲日产国码二区 | 永久黄网站色视频免费观看 |