码迷,mamicode.com
首页 > 其他好文 > 详细

羊车门问题

时间:2018-05-01 23:37:46      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:random   问题   图片   过多   判断   glob   ima   lob   允许   

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

 

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

答:我的第一感觉,当然是换不换得到车的概率都一样啊,有啥区别吗,概率都一样吧

技术分享图片技术分享图片

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

答:其实我是先做的第三步,写代码的思路是通过多次随机试验得到的结果进行判断技术分享图片

上边这个截图就是我进行了1000000次随机试验之后得到的结果,明显是更换选择比不更换选择更容易的到汽车,更换选择得到汽车的概率占总共得到汽车概率的2/3

得到这个结果之后开始仔细的分析,代码应该是没错的,那就开始编答案往结果上凑吧。

技术分享图片

以下是我的分析过程:

        大概是有四种情况:不换选择得到汽车         更换选择得到汽车     

                                        不换选择得不到汽车      更换选择得不到汽车。

        首先是第一种情况,不换选择得到汽车,这就需要第一次选择的时候选择了1/3概率的有车的门,然后执行了有1/2概率的不换选择操作,所以第一种情况的概率是1/3*1/2=1/6

        同理第二种情况,不换选择得不到汽车,首先选择了2/3概率的有羊的门,然后执行了1/2概率的不换选择操作,所以第二种情况的概率是2/3*1/2=1/3

        同理第三种情况更换选择得到汽车的概率是2/3*1/2=1/3,第四种情况更换选择得不到汽车的概率是1/3*1/2=1/6

所以得到的结果是更换选择比更换选择得到汽车的概率更大,更换选择得到汽车的概率占总共得到汽车概率的2/3

 

 

 

3、请设法编写程序验证自己的想法,验证的结果支持了你的分析结果,还是没有支持你的分析结果,请写出程序运行结果,以及其是否支持你的分析。(提示:可以借助随机数函数完成此程序)

答:因为先用代码得到的结果然后再进行的分析,所以我的结论当然支持了我的代码

技术分享图片

4、请附上你的代码。(提示:使用编辑器中的插入代码功能,将代码显示为 Python 风格)

代码如下:

import random
def rand():
    n=random.randint(1,3)
    return n
TIMES=eval(input("实验次数:"))
TimesChange=0
TimesChangeCar=0
TimesCar=0
def major():
    global TimesChange
    global TimesChangeCar
    global TimesCar
    car=random.randint(1,3)
    choice=rand()
    opendoor=rand()
    while True:
        if opendoor==car or opendoor==choice:
            opendoor=rand()
        else:
            print("{}号门后是车,选手选择{}号门,主持人打开{}号门".format(car,choice,opendoor))
            break
    change=random.randint(0,1)
    if change==0:
        print("选手坚持自己的选择,他得到的是{}".format("汽车" if car==choice else "山羊"))
    else:
        TimesChange=TimesChange+1
        print("选手更换自己的选择,他得到的是{}".format("山羊" if car==choice else "汽车"))
    if change==1 and choice!=car:
        TimesCar=TimesCar+1
        TimesChangeCar=TimesChangeCar+1
    if change==0 and choice==car:
        TimesCar=TimesCar+1
    print("***********")
for i in range (TIMES):
    major()
print("{}次随机实验中,选手更换选择{}次,共得到汽车{}次,更换选择之后得到汽车{}次".format(TIMES,TimesChange,TimesCar,TimesChangeCar))

 

羊车门问题

标签:random   问题   图片   过多   判断   glob   ima   lob   允许   

原文地址:https://www.cnblogs.com/qq147650/p/8977228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!