Python程序设计思维练习---体育竞技分析
- 体育竞技分析:模拟N场比赛
- 计算思维:抽象 + 自动化
- 模拟:抽象比赛过程,自动模拟N场比赛,当N越大时,比赛结果分析越科学。
- 本次比赛规则:回合制,15分一局,先由一方发球,如胜利,则得1分并继续发球,如失败,则双方分数不改变并交换球权。球员AB的能力为0-1之间的一个数值
思维方式:自顶向下即将一个复杂问题分解成几个问题,再细分成一个个具体的小问题,从而来解决复杂问题。自底向上为自顶向下的逆过程,即解决复杂问题的方法,逐步解决一个个小问题,来达成目的。
1.将体育竞技分析分解为以下几个小步骤
1.1打印程序的介绍性信息式
1.2获得程序运行参数:probA(A的能力值),probB(B的能力值),n(比赛场次)
1.3利用球员AB的能力值,模拟n场比赛
1.4输出球员AB获胜的场次及概率
2.将各个步骤定义成函数来实现
3.完整代码
from random import random def printInfo(): # 打印程序介绍信息 print('这个程序模拟两个选手A和B的某种竞技比赛') print('程序运行需要A和B的能力值(以0到1之间的小数表示)') def getInputs(): # 获得程序运行参数 a = eval(input('请输入选手A的能力值(0-1):')) b = eval(input('请输入选手B的能力值(0-1):')) n = eval(input('模拟比赛场次:')) return a, b, n def simOneGame(probA, probB): # 进行一场比赛 scoreA, scoreB = 0, 0 # 初始化AB的得分 serving = 'A' # 首先由A发球 while not gameOver(scoreA, scoreB): #用while循环来执行比赛 if serving == 'A': if random() < probA: # random() 方法返回随机生成的一个实数,它在[0,1)范围内。 scoreA += 1 # 用随机数来和能力值比较从而分出胜负 else: serving = 'B' else: if random() < probB: scoreB += 1 else: serving = 'A' return scoreA, scoreB def simNGames(n, probA, probB): #进行N场比赛 winsA, winsB = 0, 0 # 初始化AB的胜场数 for i in range(n): scoreA, scoreB = simOneGame(probA, probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA, winsB def gameOver(c, d): #比赛结束 return c==15 or d==15 def printSummary(n ,winA, winB): #打印比赛结果 print('竞技分析开始,共模拟{}场比赛'.format(n)) print('选手A获胜{}场比赛,占比{:.2f}%'.format(winA, winA/n*100)) print('选手B获胜{}场比赛,占比{:.2f}%'.format(winB, winB / n * 100)) def main(): printInfo() probA, probB, n =getInputs() winsA, winsB = simNGames(n, probA, probB) printSummary(n, winsA, winsB) main()
4.运行结果分析
分析以上数据得知:对于两位能力相差相同的选手(都为0.05),能力越大的选手竞技时,胜负概率越接近。
本练习来自中国大学MOOC
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C# 绘制PDF图形——基本图形、自定义图形、色彩透明度
引言 在PDF中我们可以通过C#程序代码来添加非常丰富的元素来呈现我们想要表达的内容,如绘制表格、文字,添加图形、图像等等。在本篇文章中,我将介绍如何在PDF中绘制图形,并设置图形属性的操作。 文章中将分以下要点进行介绍: 1. 绘制基本图形(线条、椭圆、圆形、矩形、三角形) 2. 绘制自定义图形 3. 绘制图形并设置图形透明度 所需工具:Spire.PDF for .NET 4.0 提示:安装后,直接引用安装路径下Bin文件夹中的dll文件到项目程序中即可。 【示例1】绘制基本图形 C# 步骤1:新建一个PDF文档,添加页,添加画笔、画刷 //新建一个PDF文档,添加页 PdfDocument doc = new PdfDocument(); PdfPageBase page = doc.Pages.Add(); //设置画笔和画刷 PdfPen pen = new PdfPen(PdfBrushes.Black, 1f); PdfBrush brush1 = PdfBrushes.RosyBrown; PdfBrush brush2 = PdfBrushes.Goldenrod...
- 下一篇
一行能装逼的JavaScript代码的延伸
前段就是坑,入坑水真深。 先看看一个黑科技, 纳尼,这是什么东西。 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 贴入浏览器执行一看,你个XX,你给老子等着。。。。。。。 然并卵。 作为一般的青年就此笑过, 可是我不是一般的青年,我是二到无穷的青年。你给老子讲清楚你这sb怎么出来的. 在一行能装逼的JavaScript代码讲得灰常清晰和明白,但是个人觉得还可以补充和扩展,于是就有了这篇文章。 解析出这个SB还是先懂几个东西: 运算符的优先级一行能装逼的JavaScript代码里面有解释, 这段装逼代码里面用的只有 ! () ~ + [] -- * 优先级别 [] () -- ~ ! * + JS类型转换一行能装逼的JavaScript代码里面有解释 减号-,乘号*,肯定是进行数学运算,所以操作数需转化为number类型 加号+,可能是字符串拼接,也可能是数学运算,所以可能会转化为number或string 一元运算,如+[],只有一个操作数的,转化为number类型关于转换顺序 尝试使用ToPrimi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果