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

利用Python破解生日悖論問(wèn)題

 更新時(shí)間:2022年12月07日 15:20:09   作者:??????  
生日悖論,就是23個(gè)人在一個(gè)房間,期間必然有兩個(gè)人生日相同的概率為50%,30個(gè)人的話概率是70%,60個(gè)人甚至上升到99%。本文就來(lái)用Python語(yǔ)言破解這一問(wèn)題,感興趣的可以了解一下

一、前言

別問(wèn)我為啥題目是英文,因?yàn)?hellip;高大上(bushi。

刷視頻的時(shí)候偶然刷到了一個(gè)關(guān)于生日悖論的,當(dāng)場(chǎng)就覺(jué)得不可思議,直到上網(wǎng)查了查……

誒,怎么是真的?

這玩意兒居然還被設(shè)置到了密碼攻擊學(xué),就很離譜的。

密碼攻擊我倒是沒(méi)那個(gè)肝,就…檢驗(yàn)一下這個(gè)悖論的合理性吧。

本文將會(huì)對(duì)生日悖論進(jìn)行詳細(xì)的講解,寫(xiě)作不易,支持一下!(萬(wàn)年不變客套話)

二、生日悖論是什么

可能有很多人不了解這個(gè)悖論,讓我們先了解一下。

生日悖論,就是23個(gè)人在一個(gè)房間,期間必然有兩個(gè)人生日相同的概率為50%,30個(gè)人的話概率是70%,60個(gè)人甚至上升到99%。

這本來(lái)不應(yīng)該是悖論,但是讓人感覺(jué)十分不合理,違反直覺(jué),故此叫做悖論。

大家肯定會(huì)問(wèn):一共就23個(gè)人,不應(yīng)該是23/365的幾率嗎?怎么可能呢?

其實(shí),是因?yàn)?hellip;好吧我也不知道,要是一個(gè)小學(xué)生都知道這就不叫悖論了。

反正這種想法肯定是錯(cuò)誤的,百度上說(shuō)因?yàn)槭请S機(jī)的23個(gè)人,大腦不擅長(zhǎng)處理非線性函數(shù),其實(shí)23個(gè)人就有很多種組合。

我們換一種想法。假設(shè)有23個(gè)人,那么如果想讓生日不相同,第一個(gè)人就可以是365天的任意一個(gè)就是365/365,而第二個(gè)人就必須是其他364個(gè)就是364/365,最后到了第23個(gè)人就是343/365。

最后我們把這些概率一乘,1一減,才是真正的概率。

三、公式破解

和上面說(shuō)的想法一樣,我們可以用公式去破解這個(gè)悖論。

公式:

p為生日相同的概率,用1減去就是生日不相同的概率,這個(gè)我們是可以求的,如上所述。

思路:用上面的公式代入進(jìn)去,先求分母相乘的結(jié)果,冪運(yùn)算就行。

之后求分子相乘結(jié)果,for循環(huán)遞減人數(shù),結(jié)果相乘,結(jié)束。

之后用分子除以分母得到概率,用1一減,結(jié)果保留三位小數(shù),加百分號(hào),初始化變量之后再次檢測(cè)。

he=1#初始化變量
he2=1#初始化變量
while 1:#死循環(huán)
    try:#錯(cuò)誤捕捉
        people=int(input())#獲取人數(shù)
    except:#如果發(fā)生錯(cuò)誤
        print("請(qǐng)輸入正確")#提示錯(cuò)誤
    else:#如果沒(méi)有發(fā)生錯(cuò)誤
        he=365**people#計(jì)算下面的所有365相乘,冪運(yùn)算
        jian=365#初始化遞減的變量
        for xh in range(people):#for循環(huán)遞減
            he2=he2*jian#計(jì)算
            jian-=1#jian自減,模擬公式分子的遞減
        print(round((1-he2/he),3),"%")#輸出保留三位小數(shù)后的結(jié)果
        he2=1#初始化變量

這就是公式破解的方法。

注釋已經(jīng)放上去了,自己看。

四、隨機(jī)數(shù)破解

這種破解方法就是隨機(jī)生成輸入的人數(shù),檢測(cè)他們的生日是否相同。

思路:首先創(chuàng)建一個(gè)函數(shù),封裝產(chǎn)生隨機(jī)數(shù)和檢測(cè)是否有重合項(xiàng)的代碼。

之后死循環(huán),獲取人數(shù)信息并且進(jìn)行多次實(shí)驗(yàn)取平均值,輸出概率。

比較列表的每一項(xiàng)是否相同,還用上for循環(huán),肝了半個(gè)小時(shí),突然想到集合可以去重,比較前后長(zhǎng)度是否有改變就行了…

import random as r#導(dǎo)入隨機(jī)數(shù)模塊且命名r
birthday=[]#保存不同生日的列表
shuliang=0#初始化變量
def jiancha():#創(chuàng)建函數(shù)來(lái)新建生日和檢查是否重合
    global shuliang,birthday#全局兩個(gè)變量
    for xh in range(people):#循環(huán)人數(shù)次
        birthday.append(r.randint(1,365))#添加隨機(jī)數(shù)生日
    if len(birthday)!=len(set(birthday)):#集合去重后與之前長(zhǎng)度不一樣就是有重合項(xiàng)
        shuliang+=1#數(shù)量加一
    birthday.clear()#清空列表birthday
while True:#死循環(huán)
    try:#異常捕獲
        people=int(input())#獲取人數(shù)
        for xh2 in range(1000):#進(jìn)行1000次檢測(cè)求平均值
            jiancha()#調(diào)用函數(shù)
        print(shuliang/1000)#求平均值
        shuliang=0#初始化變量
    except:#如果發(fā)生錯(cuò)誤
        print("請(qǐng)輸入正確的數(shù)字")#提示

注釋也放上去了自己看。

五、添加功能:dict儲(chǔ)存及改變方式

接下來(lái),我們添加一個(gè)功能:用dict儲(chǔ)存不同人數(shù)時(shí)的概率,并且先用字典保存所有再在字典里查找人數(shù)。

我們要用到字典方法:setdefault。再回顧一下詳解2:

用法:返回括號(hào)里鍵的值,如果沒(méi)有這個(gè)鍵就在字典里添加這個(gè)鍵,值為None,如果又填了一個(gè)值就是要添加的值。

還有g(shù)et,也是輸出對(duì)應(yīng)的值,沒(méi)有則返回第三個(gè)值。

聽(tīng)不懂?看就完了!

import random as r#導(dǎo)入隨機(jī)數(shù)模塊且命名r
birthday=[]#保存不同生日的列表
zidian={}#保存人數(shù)和概率的字典
shuliang,find=0,0#初始化變量
def jiancha():#創(chuàng)建函數(shù)來(lái)新建生日和檢查是否重合
    global shuliang,birthday#全局兩個(gè)變量
    for xh in range(people):#循環(huán)人數(shù)次
        birthday.append(r.randint(1,365))#添加隨機(jī)數(shù)生日
    if len(birthday)!=len(set(birthday)):#如果有重合項(xiàng)
        shuliang+=1#數(shù)量加一
    birthday.clear()#清空列表birthday
while find<100:#大于等于100才退出循環(huán)
    try:#異常捕獲
        find=int(input("要進(jìn)行多少次檢測(cè)?數(shù)量越高準(zhǔn)確度越高但是時(shí)間會(huì)變長(zhǎng),至少100次否則程序會(huì)出錯(cuò)"))#獲取次數(shù)
        if find<100:#如果find小于100
            raise(ValueError)#拋出異常
    except:#如果異常
        print("請(qǐng)正確輸入,查看自己輸入格式是否正確及數(shù)值是否大于99")#提示
for people in range(1,366):#每一個(gè)人數(shù)
    for xh2 in range(find):#進(jìn)行find次檢測(cè)求平均值
        jiancha()#調(diào)用函數(shù)
    if people%20==0:#如果可以被20整除
        print("等待進(jìn)度:",round(people/365*find,2),"%")#安慰進(jìn)度條
    zidian.setdefault(people,str(shuliang)+"%")#字典添加人數(shù)和概率
    shuliang=0#初始化變量
zidian2=str(zidian)#zidian2為zidian的字符串形式
while True:#死循環(huán)
    try:#異常捕獲
        cha=int(input("請(qǐng)輸入房間有多少個(gè)人,輸出全部請(qǐng)輸入114514"))#詢問(wèn)人數(shù)或者全部輸出
        if cha==114514:#如果選擇全部輸出
            print(zidian2[1:-1])#截取字符串來(lái)去大括號(hào)
            print("冒號(hào)前面是人數(shù),冒號(hào)后面是概率")#提示語(yǔ)
        else:#如果選擇截取
            print(zidian.get(cha,"請(qǐng)輸入1到365位"))#輸出對(duì)應(yīng)的value,如果沒(méi)有則提示范圍
    except:#如果錯(cuò)誤
        print("請(qǐng)輸入正確")#提示

代碼解析還是看注釋。

到此這篇關(guān)于利用Python破解生日悖論問(wèn)題的文章就介紹到這了,更多相關(guān)Python生日悖論內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中schedule擴(kuò)展的具體使用

    Python中schedule擴(kuò)展的具體使用

    Python的schedule模塊是一個(gè)輕量級(jí)的Python庫(kù),用于在指定時(shí)間執(zhí)行某些操作,本文就來(lái)介紹一下Python中schedule擴(kuò)展的具體使用,感興趣的可以了解一下
    2024-12-12
  • 如何使用Python控制攝像頭錄制視頻

    如何使用Python控制攝像頭錄制視頻

    這篇文章主要介紹了如何使用Python控制攝像頭錄制視頻,實(shí)現(xiàn)過(guò)程需要用到三個(gè)庫(kù)tkinter庫(kù)、PIL庫(kù)、cv2庫(kù),下面將內(nèi)容詳細(xì)的一步一步實(shí)現(xiàn),希望對(duì)你有所啟發(fā)并能做一個(gè)屬于自己的攝像頭控制程序
    2022-03-03
  • Python3爬蟲(chóng)之自動(dòng)查詢天氣并實(shí)現(xiàn)語(yǔ)音播報(bào)

    Python3爬蟲(chóng)之自動(dòng)查詢天氣并實(shí)現(xiàn)語(yǔ)音播報(bào)

    這篇文章主要介紹了Python3爬蟲(chóng)之自動(dòng)查詢天氣并實(shí)現(xiàn)語(yǔ)音播報(bào),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Python讀取pdf、word、excel、ppt、csv和txt文件提取所有文本

    Python讀取pdf、word、excel、ppt、csv和txt文件提取所有文本

    這篇文章主要給大家介紹了關(guān)于Python讀取pdf、word、excel、ppt、csv和txt文件提取所有文本的相關(guān)資料,文中通過(guò)代碼示例將實(shí)現(xiàn)的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別

    python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別

    這篇文章主要為大家介紹了python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成功能

    Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成功能

    聲音的本質(zhì)是震動(dòng),震動(dòng)的本質(zhì)是位移關(guān)于時(shí)間的函數(shù),波形文件(.wav)中記錄了不同采樣時(shí)刻的位移。這篇文章主要介紹了Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成,需要的朋友可以參考下
    2019-09-09
  • 神經(jīng)網(wǎng)絡(luò)算法RNN實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)

    神經(jīng)網(wǎng)絡(luò)算法RNN實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)

    這篇文章主要為大家介紹了神經(jīng)網(wǎng)絡(luò)算法RNN實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • python 下載文件的幾種方式分享

    python 下載文件的幾種方式分享

    這篇文章主要介紹了python 下載文件的幾種方式分享,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 68行Python代碼實(shí)現(xiàn)帶難度升級(jí)的貪吃蛇

    68行Python代碼實(shí)現(xiàn)帶難度升級(jí)的貪吃蛇

    本文主要介紹了Python代碼實(shí)現(xiàn)帶難度升級(jí)的貪吃蛇,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 《Python學(xué)習(xí)手冊(cè)》學(xué)習(xí)總結(jié)

    《Python學(xué)習(xí)手冊(cè)》學(xué)習(xí)總結(jié)

    本篇文章是讀者朋友在學(xué)習(xí)了《Python學(xué)習(xí)手冊(cè)》這本書(shū)以后,總結(jié)出的學(xué)習(xí)心得,值得大家參考學(xué)習(xí)。
    2018-01-01

最新評(píng)論

湘阴县| 淮南市| 扬中市| 稷山县| 嫩江县| 巴彦县| 丰顺县| 汉阴县| 左云县| 景德镇市| 曲靖市| 青神县| 志丹县| 吉木萨尔县| 静乐县| 张掖市| 墨玉县| 博湖县| 屯门区| 龙口市| 连南| 北海市| 北流市| 涿鹿县| 柳江县| 内乡县| 台北市| 抚州市| 屏东县| 墨竹工卡县| 闻喜县| 崇信县| 岢岚县| 巩义市| 万荣县| 石首市| 葫芦岛市| 施秉县| 内黄县| 原平市| 怀宁县|