使用Python和Numpy的加权抛硬币游戏的概率 本周的一个简短而有趣的游戏。


两个玩家正在玩一个游戏,他们从玩家1开始抛出一枚不一定公平的硬币。第一个抛出正面的人获胜。抛出的硬币落在头上的概率是p。那么玩家1赢得游戏的概率是多少?

我们可以用python中的一个简单函数来探索这个问题。让我们写一个函数,输入两个参数。1.)要玩的游戏数量,以及2.)掷硬币的结果是正面的概率(默认设置为0.5或50%)。

我们把这个函数称为 "prob_weighted_coin_game"

我们可以用以下代码模拟这个游戏。

import numpy as npdef prob_weighted_coin_game(num_games, prob_heads=.5):   player_one_wins = 0   for n in range(0,num_games):     num_flips = 0     win = 0    while win == 0:       turn = np.random.uniform(0,1)       num_flips += 1       if turn <= prob_heads:         if num_flips % 2 != 0:           player_one_wins += 1         win += 1   return float(player_one_wins)/float(num_games)

现在,让我们一步步简单地走过这个过程。

import numpy as npdef prob_weighted_coin_game(num_games, prob_heads = 0.5):   player_one_wins = 0

我们首先导入numpy,因为我们可以利用它的随机选择功能来模拟这个游戏的投币机制。

我们定义我们的函数的名称,并指定我们的两个参数。我们将默认的正面概率设置为0.5,以备我们只是想指定一些使用公平硬币的游戏,看看结果如何。显然,我们可以在这里输入我们喜欢的自定义概率。

我们还为玩家1赢得的游戏数量设置了一个全局计数器,每轮模拟都从0开始。

for n in range(0,num_games):     num_flips = 0     win = 0    while win == 0:       turn = np.random.uniform(0,1)       num_flips += 1

现在,对于指定的模拟次数中的每一个游戏(例如range(0, num_games)),我们将从零开始计算翻硬币的次数。这既可以记录游戏进行了多长时间,也可以帮助我们确定一旦抛出一个人头,谁是赢家。

我们还指定了一个胜利条件 "赢",这将帮助我们知道游戏何时结束。当赢的时候仍然等于零,玩家继续抛掷硬币。每一次 "转 "都构成了硬币的翻转,它是一个随机选择的小数值,介于0和1之间。

      if turn <= prob_heads:         if num_flips % 2 != 0:           player_one_wins += 1         win += 1

如果随机选择的 "turn "值小于或等于我们设定的 "prob_heads "值,我们就认为这是一个获胜条件。

我们可以这样理解:如果翻头的概率是0.6,比0和1之间的60%的值都可以解释为翻头(例如,0.0和0.6之间的所有值)。

一旦满足了获胜条件,我们就检查硬币被翻转了多少次。因为玩家1总是拥有第一次翻转,我们知道,翻转次数为奇数意味着玩家1是最后一个玩家,因此将是赢家。如果玩家1赢了游戏,我们就在函数顶部的player_one_wins计数器上加1。我们还将 "赢 "的值改为1.0,这将中断当前游戏,并在预设的模拟次数中开始下一个游戏。

  return float(player_one_wins)/float(num_games)

一旦所有模拟运行完毕,该函数将返回玩家1赢得的游戏数除以总游戏数。这将表示为十进制的胜率。

好了! 现在我们已经写好了我们的函数,让我们用一枚公平的硬币玩50,000局,看看结果如何。

prob_weighted_coin_game(50000)0.66848

在50,000场游戏中,我们看到玩家1通过先走有明显的优势。事实上,即使在使用公平硬币的情况下,玩家1也有大约2/3的机会因先抛硬币而赢得游戏。

如果我们调整硬币翻出头的概率呢?如果硬币有75%的机会是正面呢?

prob_weighted_coin_game(50000, .75)0.80066

由于加权硬币75%的翻转都是正面,玩家1将有望在80%的时间内获胜。

如果我们真的缩减出现头像的可能性呢?比如说,如果头像只出现在1%的时候?

prob_weighted_coin_game(50000, .01)0.50498

只有当我们大幅削减人头出现的可能性时,两个玩家才有大致相同的获胜机会。

有趣的东西! 你可以随意玩玩这个函数,看看不同的模拟次数和人头概率对玩家1获胜的可能性有何影响。

谢谢你的阅读!

本文由 mdnice 多平台发布

Python和Numpy的加权抛硬币游戏的概率相关推荐

  1. python抛硬币正面向上概率_Python-计算抛硬币出现连续10次正面朝上的概率的仿真实验...

    前言 本人是大一刚入学没多久的新生,第一次写博客可能某些方面不太好望大家多多谅解!您觉得写得不好的地方,欢迎加大力度开口喷/滑稽~ 1.问题重述 抛硬币100次,问出现10次连续正面朝上的概率为多少? ...

  2. python抛硬币正反面的概率_抛硬币连续N次正面后再次正面的概率是多少呢?有疑虑的话咱用Python模拟一下吧...

    Python不用学,看看你就懂:拿来就能用,用用你就会 无需安装编程软件,把代码拷贝到在线编辑器即可运行 抛硬币连续N次正面后下一次还是正面的概率是多少呢? 这是一个答案似乎很肯定但心里又不踏实的问题 ...

  3. python模拟抛硬币_关于概率:模拟2个人抛硬币直到获得第一个头像Python

    所以我让A和B玩一个游戏,游戏开始于A扔硬币. 如果显示正面,则A获胜,游戏结束. 否则,B掷出,如果B领先,则B获胜,比赛结束. 基本上,游戏将一直持续到谁的硬币先显示出领先者为止. 理论上,A获胜 ...

  4. 判断和循环——实战收尾篇1(二分法、抛硬币等)

    目录 ​1.独领风骚的表达式 2.求n的阶乘: 3.求1~10的阶乘之和 4.找一个有序数组中的具体数字(二分法) 5.演示多个字符从两端,向中间汇聚 6.抛硬币游戏 补充: 随机数的设置 ​1.独领 ...

  5. 从抛硬币试验看随机游走定义的基本概念错误

    全世界只有3.14 % 的人关注了 爆炸吧知识 随机游走(Random Walk)是<随机过程>教科书中用于描述动态随机现象的一种基本随机过程,许多重要的随机过程都可由它派生出来,其理论不 ...

  6. 两个人玩抛硬币的游戏,谁先抛到正面就获胜。那么先抛的人获胜概率为()。两种思路

    思路一:把A.B都抛硬币一次看成一局游戏. 情况1: A第一次抛正面 -> A胜 p= 1/2 情况2: A第一次抛反面.B抛正面 -> B胜 p= (1/2) * (1/2)=1/4 情 ...

  7. 抛硬币小游戏微信小程序源码

    简介: 抛硬币小游戏微信小程序源码 日常生活中遇到选择?抛个硬币看看天意吧! 有了这个小程序,起不起床拋一下,叫不叫外卖拋一下,打不打扫房间拋一下,让生活充满乐趣~ 人生决定不了的决定就让上天来决定吧 ...

  8. python抛硬币代码_求助python掷硬币

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #coin.py import random #coin类 #包含一个属性dictCoin,类型是字典,保存正反面 #包含一个方法getCoin,获取本次 ...

  9. [Python]*用随机数模拟抛硬币

    #用随机数random模拟抛硬币 import randomwhile 1:counts=int(input('抛: 次'))i=0front=0back=0while i<counts:num ...

  10. python模拟抛硬币100万次、出现正面和反面的次数及概率_模拟抛硬币100万次,统计出现正面的次数及概率,并输出结果。 请按照如下格式完成: def count(n): 此处完成代码 函数可...

    [填空题]象征,标志 [单选题]It's necessary _____ a taxi driver _____the city well. [程序题]输入年,月,日,计算该日期是该年的第几天. [程 ...

最新文章

  1. 喊了好久的AI落地究竟卡在哪里了?
  2. mysql 二进制日志
  3. 语音技术正在改变计算行业
  4. finalspeed安装及使用教程
  5. Idea+Maven+Jersey2+Tomcat配置Web服务
  6. three.js(七) 绘制到WebGLRenderTarget
  7. cacti php zombie,Cacti1.2.x新版教程之监控本机
  8. 2的次幂表示【递归算法训练】
  9. 数据集 oracle,Analytics 数据集 - Oracle® ZFS Storage Appliance RESTful API 指南,发行版 OS8.6.0...
  10. 巧用 ExcelFileCleaner 减小excel 文件大小
  11. 火车售票系统html模板,火车售票系统完整代码.doc
  12. 研发体系核心代码和文档安全保护方案
  13. 支付宝免签在线支付要饭教程
  14. 炼石:栉风沐雨七载路,不负韶华再出发
  15. 脉冲定理和人性惯性定律,我想这段时间我处于波峰状态。
  16. 这台计算机无法连接usb,爱思助手无法连接或者连接超时解决办法
  17. 解决关闭xftp,总是跳出无法访问网络位置,请输入xftp 6.msi
  18. .bat脚本执行cmd命令
  19. 2012年8月传统编程语言就业趋势分析(图)
  20. mysql索引失效怎么办,跳槽薪资翻倍

热门文章

  1. 纹理压缩简介 DXT PVR ETC
  2. LeetCode 单调栈练习题归纳总结
  3. 詹姆斯加入湖人,杜兰特会留在勇士吗?
  4. 卸载 Notepad++ !事实已证明,它更牛逼……
  5. 毕业设计 stm32车牌识别系统设计与实现 - 单片机 嵌入式
  6. Java 如何判断手机号的运营商,是移动、联通、还是电信?
  7. 关于广告联盟的高价词问题
  8. 【精读笔记】JavaScript高级程序设计 第3章 语言基础
  9. Android Jetpack架构组件之Room
  10. DSP TMS320F2803x 增强型捕获模块(eCAP)