最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用random和tertools模塊解一些經(jīng)典概率問題

 更新時間:2015年01月28日 16:34:47   投稿:junjie  
這篇文章主要介紹了Python使用random和tertools模塊解一些經(jīng)典概率問題,本文講解了使用random和tertools模塊解羊車門問題、撲克牌問題、生日悖論等經(jīng)典概率問題,需要的朋友可以參考下

random 模塊中的常用函數(shù)

復(fù)制代碼 代碼如下:

random()
返回一個位于區(qū)間 [0,1] 內(nèi)的實數(shù);
uniform(a, b)
返回一個位于區(qū)間 [a,b] 內(nèi)的實數(shù);
randint(a, b)
返回一個位于區(qū)間 [a,b] 內(nèi)的整數(shù);
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 得到排列、組合

復(fù)制代碼 代碼如下:

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

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

羊車門問題

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

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

復(fù)制代碼 代碼如下:

from random import *

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

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

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

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

運行結(jié)果:

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

撲克牌問題

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

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

復(fù)制代碼 代碼如下:

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 的個數(shù), 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])

運行結(jié)果:

情況一: 0.3694922900321386
情況二: 0.5613778028656186

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

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

網(wǎng)絡(luò)上每一次有人發(fā)帖提出與條件概率有關(guān)的悖論時,總會引來無數(shù)人的圍觀和爭論,哪怕這些問題的實質(zhì)都是相同的。本題目無疑是爭論的最多的問題之一。

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

復(fù)制代碼 代碼如下:

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

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

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

print(both/exist)


運行結(jié)果:
復(fù)制代碼 代碼如下:

0.33332221770186543

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

生日悖論

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

復(fù)制代碼 代碼如下:

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)


運行結(jié)果:
復(fù)制代碼 代碼如下:

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

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

相關(guān)文章

  • Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法

    Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法

    這篇文章主要介紹了Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python簡單連接MongoDB數(shù)據(jù)庫的方法

    Python簡單連接MongoDB數(shù)據(jù)庫的方法

    這篇文章主要介紹了Python簡單連接MongoDB數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Python使用pymongo模塊操作MongoDB數(shù)據(jù)庫的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • Python模塊匯總(常用第三方庫)

    Python模塊匯總(常用第三方庫)

    計算機在開發(fā)過程中,代碼越寫越多,也就越難以維護,所以為了編寫可維護的代碼,我們會把函數(shù)進行分組,放在不同的文件里。在python里,一個.py文件就是一個模塊
    2019-10-10
  • Python如何查找特定名稱文件

    Python如何查找特定名稱文件

    這篇文章主要介紹了Python如何查找特定名稱文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 關(guān)于反射和類的特殊成員方法

    Python 關(guān)于反射和類的特殊成員方法

    本文給大家分享python關(guān)于反射和類的特殊成員方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令

    python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令

    這篇文章主要介紹了python基于socket模擬實現(xiàn)ssh遠程執(zhí)行命令,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • python元組操作實例解析

    python元組操作實例解析

    這篇文章主要介紹了python元組操作,以實例的形式較為直觀的講述了Python中元組的特點與用法,需要的朋友可以參考下
    2014-09-09
  • 200行python代碼實現(xiàn)2048游戲

    200行python代碼實現(xiàn)2048游戲

    這篇文章主要為大家詳細介紹了200行Python代碼實現(xiàn)2048游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python中Pytest常用的插件

    python中Pytest常用的插件

    這篇文章主要介紹了python中Pytest常用的插件,Pytest是Python的一種單元測試框架,與unittest相比,使用起來更簡潔、效率更高,也是目前大部分使用python編寫測試用例的小伙伴們的第一選擇了
    2022-06-06
  • 分享Python獲取本機IP地址的幾種方法

    分享Python獲取本機IP地址的幾種方法

    這篇文章主要介紹了分享Python獲取本機IP地址的幾種方法,分享了使用專用網(wǎng)站、使用自帶socket庫、使用第三方netifaces庫等方式們需要的小伙伴可以參考一下
    2022-03-03

最新評論

二连浩特市| 刚察县| 葵青区| 西宁市| 巩留县| 桃江县| 栾川县| 锦州市| 信宜市| 额尔古纳市| 威宁| 响水县| 奈曼旗| 济宁市| 阳山县| 镇江市| 诸暨市| 定南县| 新丰县| 深州市| 龙口市| 宕昌县| 陈巴尔虎旗| 洪泽县| 怀安县| 栾城县| 涿州市| 香港 | 徐闻县| 皋兰县| 彰武县| 峨山| 怀宁县| 泽普县| 竹山县| 年辖:市辖区| 丹阳市| 大渡口区| 慈利县| 罗平县| 牙克石市|