Python使用random和tertools模块解一些经典概率问题
|
random 模块中的常用函数 利用 itertools 得到排列、组合 combinations(sequence,k)) 羊车门问题 有一个抽奖节目,台上有三扇关闭的门,一扇门后面停着汽车,其余门后都是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。问题是:参赛者更换选择后能否增加赢得汽车的机会? 有很多时候,我们并不知道自己的理论分析正确与否,但如果知道概率论中的 大数定律,又碰巧懂一点编程,无疑可以利用计算机重复模拟事件以求解问题。该问题的 Python 3.x 解答程序如下: def once(doors = 3): # 一次事件的模拟 h = 0 # 坚持选择赢得汽车的次数 for i in range(times): print("维持选择:",h/times*100,"%n改变选择:",c/times*100,"%") 运行结果: 维持选择: 33.268 % 扑克牌问题 概率论给我们带来了很多匪夷所思的反常结果,条件概率尤其如此。譬如: 四个人打扑克,其中一个人说,我手上有一个 A。请问他手上有不止一个 A 的概率是多少? cards = [i for i in range(52)] def once(): # 0 表示黑桃 A for i in range(int(1e6)): print('情况一:',counter[0]/counter[1],'n情况二:',counter[2]/counter[3]) 运行结果: 情况一: 0.3694922900321386 有趣的事情出来了:如果这个人宣布了手中 A 的花色,他手中持有多个 A 的概率竟然会大大增加。可这又该如何理解呢? 一个家庭中有两个小孩,已知其中一个是女孩,求另一个小孩也是女孩的概率 网络上每一次有人发帖提出与条件概率有关的悖论时,总会引来无数人的围观和争论,哪怕这些问题的实质都是相同的。本题目无疑是争论的最多的问题之一。 说起来网上的分析都像模像样,一些原本都迷糊的人被人讲的晕头转向,一会觉得这个对,一会又觉得那个对。现在我不给你分析那些道理,就用计算机来模拟问题,让你直接得到结论,而毋须明白个中缘由。 family = (lambda n :[{randrange(2),randrange(2)} for i in range(n)])(int(1e6)) both = family.count({0}) # 都是女孩的家庭数 print(both/exist) 生日悖论 每个人都有生日,偶尔会遇到与自己同一天过生日的人,但在生活中这种缘分似乎并不常有。我们猜猜看:在 50 个人当中出现这种缘分的概率有多大,是 10%、20% 还是 50%? counter,times = 0,int(1e6) print('在 50 个人中有相同生日的概率为:',counter/times) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python – 是否有可能等到`.persist()`在dask中完成缓存?
- python – 有没有一种简单的方法来添加边框到Kivy Labels,B
- python简单商城购物车实例代码
- 用python包装C代码(手动)
- Python编程二分法实现冒泡算法+快速排序代码示例
- Python 中开发pattern的string模板(template) 实例详解
- python实现简单的socket server实例
- Django中模型Model添加JSON类型字段的方法
- python中列表元素连接方法join用法实例
- 【Python】Python-numpy逻辑报错:The truth value of an a
