zoukankan      html  css  js  c++  java
  • 利用Python分析羊车门问题

    题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。

    1、按照你的第一感觉回答,你觉得不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?

    答:换几率更高,在电影《决胜21点》中看过这个问题。

     

     

    2、请自己认真分析一下“不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?” 写出你分析的思路和结果。

     

    答:可以把这题当作一个概率问题,分析如下:

       设三门后面分别为车,A羊,B羊。则第一次选门的时候,可以分为以下三种等概情况:

       情况1:车 1/3

          情况2A1/3

       情况3B1/3

       接下来,若不更换所选门:

       情况1:得车

      情况2:不得

      情况3:不得

       若更换所选门:

       情况1:不得

      情况2:得

      情况3:得

       显然,换的情况概率为2/3,高于不换的1/3。故换选择有更高的几率。

       此外,还可以用一种我自认为容易理解的解释来说明我的答案:

        在主持人打开羊门之后,剩下的门无非一扇车门,一扇羊门。若我们换门,那么必然会改变先前的结果。(车门变羊门,羊门变车门)。

        于是可以认为,

        先前选到车门的概率==更换后选到羊门的概率;

       同理,

        先前选到羊门的概率==更换后选到车门的概率;

       也就是说,更换后选到车门的概率是2/3。而先前选到车门不换的概率是1/3。还是换选择概率更高。

      注:和同学讨论过后,这里提一下我认为为什么答案不是1/2

       如果换与不换得车概率均为1/2。那么题目就变为:“主持人先打开一扇有羊的门,在剩下的两个门中你进行选择,求得车的概率。”

       我认为关键的是:若你不更换门的话,主持人开门这一事件并不影响你选到的是车门的概率。

     

    3. 请设法编写程序验证自己的想法,验证的结果支持了你的分析结果,还是没有支持你的分析结果,请写出程序运行结果,以及其是否支持你的分析。

    答:基于上述分析,我认为其实根本不必模拟追踪门的过程。

           方法如下:1).声名两个变量,mancar,分别代表你的初次选择和车门的位置。

             再声名两个变量,换门获胜数与不换门获胜数,用于记录结果。

           2).利用random库中的randint产生1~3范围内的随机数,对两个变量分别赋值。

           3).若赋值后,car==man,则说明一开始选择的便是车门,

            此时,不换的获胜数+1

                否则,意味着一开始选择的是羊门,则换的获胜数+1

           4).将上述过程重复足够大的基数,计算概率,验证结论。

     

           实验结果如下:分别将过程重复1000遍,10000遍,十万遍,一百万遍。

             重复基数越大,不换与换获胜的几率分别越接近于1/32/3。验证了之前的猜想。

            

     

    4请附上你的代码

    代码如下:

    import random as r
    
    #总次数
    total=1000000 #1000,1W,10W,100W
    #换与不换的获胜次数
    win1=0
    win2=0
    
    for i in range(total):
        #模拟选择过程
        man=r.randint(1,3)
        car=r.randint(1,3)
        #结果:一开始为车门,不换+1.
        #       否则则一开始为羊门,换+1.
        if man==car:
            win1+=1
        else:
            win2+=1
    
    print("在{}次实验中:".format(total))
    print("若不更改门,获胜概率为{:.3}%.".format((win1/total)*100))
    print("若更改门,获胜概率为{:.3}%.".format((win2/total)*100))

     

     

     

  • 相关阅读:
    shell test条件判断
    shell 变量
    shell 流程结构
    shell 正则表达式
    shell脚本常用参数
    snmp 简单的网络管理协议
    linux
    nmap
    git 基础操作
    linux 下 svn 更新代码
  • 原文地址:https://www.cnblogs.com/keelongz/p/10014889.html
Copyright © 2011-2022 走看看