python羊车门问题

2024-02-20 23:18
文章标签 python 问题 车门

本文主要是介绍python羊车门问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 读史随笔(二十八)
晋武帝司马炎统一全国后大封诸侯,他认为天下已经太平了,可以享受皇位了。说到享受,每个人的人生哲学不同,价值观也不同。有人以为平安、有个幸福的家就是享受,有人以为不断的奋斗、生活充实就是享受,有的人则以为美酒、咖啡加美人的节外生枝才是享受。司马炎就是这后一种人,当时他的“羊车门”可谓是轰动全国的。。取得“统一”胜利后,晋武帝司马炎觉得应该分封诸王,让其各据一方。他认为你们在四面八方给我看管着我夺来的地盘,它就如一道围墙,坚不可摧,我呢,在中心地带便高枕无忧了。于是,他开始寻找人生的另一转折点——享受美女。其实,早在泰始九年(273年)他就下诏遴选市级以上官员们的千金入宫了。并于第二年他又在市级以下的普通官员家中诏选女孩入宫。武帝很霸道,在他挑选美女期间,全国的人都不许结婚,必须等他选完以后方能谈婚论嫁。同时,他还派太监坐公车去全国各地进行海选。生活条件优越的大户人家的女儿唯恐被选了去,她们往往故意将自己打扮的衣衫褴褛、蓬头垢面的。而那些被选中的女子就惨了,她们在与父母分离时都是嚎啕大哭、伤心欲绝。那种场面真不亚于鬼子进村时的掠抢啊!由于拉网式的海选,晋武帝的后宫姬妾可就不止三千佳丽了,那个数目是相当惊人的,足有一万多人呢。这倒让他每天为此大伤脑筋,不知道究竟在哪个妾的宫室就寝了。后来,他冥思苦想之后,有了一个损招,索性坐上羊车,随羊的意,羊在哪停住了,他就在哪里留宿。这件事听起来,既荒唐,又滑稽。晋武帝完全是跟着羊的感觉走,羊拉着人当然有走累的时候,所以羊的决定对女子们很重要。你还别说,由于海选来的美女,来自不同的家庭背景,她们当中就有聪明机灵的,有的还深谙羊的习性。为了抓住皇上睡,她们懂得应该先抓住羊的胃。也许这就是深宫的生存法则吧,毕竟猫有猫法,狗有狗道,鸡不撒尿。有些女子将竹子叶插在门口,地上泼洒好多盐水,因为羊喜欢吃竹叶,而且还好食咸的东西。因此这等于先抓住了羊的胃,羊留下来了,皇帝也便不走了。这样得到的宠幸当然也就多一些。那么那些忠厚老实、没有城府的美女可能一生都看不见皇上一眼,孤老死去呢。看来宫内多怨鬼一点不假,其中猫腻儿非一般人能玩的转的。不久,有心计的女子长时间得不到皇帝的临幸,就开始放出自己的眼线,想弄清其中端倪,结果发现“原来如此”。于是,后宫就像展开军备竞赛一样,纷纷效仿这种既科学又有效的办法,来进行争夺皇上大战。时间长了,不知是羊把美女们变得更聪明了,还是美女们将羊锻炼的更刁钻了。美女们的争风吃醋、大肆“贿赂”羊,使得羊逐渐地变得“洋气”起来了,竹叶已经远远不能满足它的胃口了,或说竹叶已不再是什么“新鲜”之物了。羊在交际场上混久了,见的市面也大了,而且它也看开了。心想:“小样儿,你们以为插几片破竹叶子,就可以收买本尊了吗?也不瞧瞧我是谁,本羊可是皇上的天下第一秘,皇大哥的就寝,我说了算,不来点儿新鲜的,就想傍大款?嘿嘿~没门儿!”。羊便开始了它的游击战,它狡猾地随意走、随意停,反正不差钱儿,吃喝不愁。这下美女们可惨了,她们又回到了生活的原点,她们的命运彻底由老“天”安排、由羊主宰了,这便是臭名昭著的“羊车门”。司马炎荒淫的“羊车门”,大臣们看在眼里,找机会就劝谏,可是却丝毫没有撼动武帝痴迷的心,“太康繁荣”的隐患也便埋在了以皇帝为首的种种腐败之中了。

分析来了:设门后为车、甲羊、乙羊,第1次选定门,其后为车、甲羊、乙羊的概率均为1/3,因此可分为等概的3种情况:

情况1: 车 (1/3概率) 

情况2: 甲羊(1/3概率)

情况3: 乙羊(1/3概率)

若坚持“换”的策略,情况1时得羊,情况2时得车,情况3时得车;若坚持“不换”的策略,情况1时得车,情况2时得羊,情况3时得羊。答案非常简单,应选择“换”的策略,这样会有2/3的机会得到车,绝不能选择“不换”的策略,这样只有1/3的机会得到车。

 

要是我上台去选择,心里会祈祷第1次选择让我选上羊吧,因为只要第1次我选中了羊,甲羊乙羊都行,然后主持人把另一只羊门打开,我只要一换,就一定能得车啊。

 

有些人认定变得车的概率是1/2,这是错误的,原因在于:如果在你第1次选择之前,主持人就将某个羊门打开,则变得车的概率的确是1/2,但很遗憾,题目不是这样的。由于第1次你指定了一个门,这个门后有1/3的可能是车,有2/3的可能是羊。所以主持人只能被动地以1/3的可能从2个羊门任选1个打开,以2/3的可能没有选择地将剩下的那个羊门打开。

 

其实,这是个典型的条件概率问题,如果你跟着我上面的分析思考,会觉得非常简单,但问题在于,如果你的概率论素养不够,在你独立思考时,很容易把甲羊乙羊混淆在一起。

 

为了更透彻地说明这个问题,我推广分析了n羊1车的情况,并分情况加以考虑:

换而得车情况:即第1次从n羊1车中选到羊,此情况概率为n/(n 1),在此条件下,换而得车的概率为(n/(n 1))*(1/(n-1))……..(公式1)

 

换而得羊的情况,又分为以下两种情况:

 情况一:第1次选到车,第2次换必然得羊,此概率为1/(n 1)

 情况二:第1次选到羊,此情况概率为n/(n 1),在此条件下,换而得羊的概率为(n/(n 1))*((n-2)/(n-1)) 

 将上述两种情况合并,即换而得羊的概率为1/(n 1) (n/(n 1))*((n-2)/(n-1))……(公式2) 

 将换而得车与换而得羊的概率相加(n/(n 1))*(1/(n-1)) 1/(n 1) (n/(n 1))*((n-2)/(n-1)),其结果为1。这个“1”表明了上述分析并没有遗漏情况,是对上式是否正确的一个检验。

 

可能有的网友对上面n羊1车的情况发懵,那我就再罗嗦两句: 

第1次选到羊(第1次选到车的话,换必得羊),此时因为有n羊1车,所有有n 1个门,选到羊的概率为n/(n 1);

第2次换时要从剩下的n-2只羊和1个车中恰好选到车(因你第1次选择的是羊,且主持人亮出1只羊,所以你可换的门后有n-2只羊),所以此时概率为1/(n-2 1),即1/n-1;两个概率相乘为(n/(n 1))*(1/(n-1))。

 

再回到原题2羊1车的情况,把n=2代入到公式1中,得换而得车的概率为2/3,这与前面的分析完全一致。 

 

那位博士起初的程序结果错误,原因在于他的算法本身就是错的,后来他在程序中清空中他的思想,用随机数做了最原始的仿真,结果是:换得车概率0.66657,不换得车概率0.33343。

问题:

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

请问:

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

答:第一感觉换与不换获奖几率没有发生变化。

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

答:

分析一:

假设:


一号门二号门三号门

玩家选一号门,换(得到车),不换(羊)
玩家选二号门,换(羊),不换(车)
玩家选三号门,换(车),不换(羊)

综上所述:玩家换得到车的概率为2/3,玩家不换得到车的概率为1/3。

分析二:

玩家选中车的概率为1/3,换得到车的概率为1/3*0=0。
玩家选中羊的概率为2/3,换得到车的概率为2/3*1=2/3。

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

答:

import random
x=random.randint(5000,10000)
change=0
nochange=0
for i in range(1,x+1):a=random.randrange(1,4)b=random.randrange(1,4)if a==b:nochange=nochange+1else:change=change+1
print("不更改选择得到汽车的概率为{}".format(nochange/x))
print("更改选择得到汽车的概率为{}".format(change/x))
运行结果:?
1
2
不更改选择得到汽车的概率为0.33340982101881594
更改选择得到汽车的概率为0.666590178981184

注:这篇文章来自于三个地方:http://www.111cn.net/phper/149713.htm

http://blog.sina.com.cn/s/blog_6c7e111d0101nruv.html

https://wenwen.sogou.com/z/q430308760.htm

这篇关于python羊车门问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729843

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、