羽毛球比赛规则:

1.21分制,3局2胜为佳。

2.每球得分制。

3.每回合中,取胜的一方加1分。

4.当双方均为20分时,领先对方2分的一方赢得该局比赛。

5.当双方均为29分时,先取得30分的一方赢得该局比赛。

6.一局比赛的获胜方在下一局率先发球。

该问题的IPO模式如下:

输入(I):选手A和B的能力值(用0至1的小数表示),模拟比赛的场次

处理(P):模拟比赛过程

输出(O):选手A和B分别赢得比赛的场次和概率

解决这种问题,首选自顶向下设计,即以一个总问题开始,将其拆分成若干个小问题,考虑每个小问题的解决方案,最终使总问题变得很容易解决。然后只需把所有小问题的解决方案组合起来,就可以得到一个程序。

自顶向下设计中最重要的是顶层设计。 以体育竞技分析为例,可以从问题的IPO描述开始。大多数程序都可以简单将IPO 描述直接用到程序结构设计中,体育竞技分析从用户得到模拟参数模拟比赛,最后输出结果。

步骤1:输入一些介绍信息

defmain():

printinput()

步骤2:获得用户输入

defmain():

printinput()

abilityA,abilityB,n=getinput()

步骤3:使用abilityA、abilityB模拟n场比赛

defmain():

printinput()

abilityA,abilityB,n=getinput()

winsA,winsB=simNGames(n,abilityA,abilityB)

步骤4:输出结果

defmain():

printinput()

abilityA,abilityB,n=getinput()

winsA,winsB=simNGames(n,abilityA,abilityB)

printoutcome(winsA,winsB)

由此我们将总问题分成了4个独立的函数:printinput()、getinput()、simNGames()、printoutcome()

printinput()函数中我们输入程序的介绍

defprintinput():print("这个程序模拟两个选手A和B的羽毛球比赛")print("该程序需要选手A和B的能力值(以0到1之间的小数表示)")

getinput()函数中我们获得选手A和B的能力值和模拟比赛的场次

defgetinput():

a=eval(input("请输入选手A的能力值(0-1):"))

b=eval(input("请输入选手B的能力值(0-1):"))

n=eval(input("模拟比赛的场次:"))

simNGames()函数是整个程序最为关键的部分,它能模拟n场比赛的胜负关系并记录选手赢得比赛的场次

defsimNGames(n,abilityA,abilityB):

winsA,winsB=0,0for i inrange(n):

scoreA,scoreB=simOneGame(abilityA,abilityB)if scoreA>scoreB:

winsA+=1

else:

winsB+=1

return winsA,winsB

在simNGames()函数中,我们可以看到其中又新添了一个函数simOneGame(),它是用来模拟一场比赛的胜负

defsimOneGame(abilityA,abilityB):

scoreA,scoreB=0,0

serving="A" #先将发球权给A

while notgameOver(scoreA,scoreB,abilityA,abilityB):if serving=="A":if random()

scoreA+=1 #A赢加1分

else:

scoreB+=1 #B赢加1分

serving="B" #B赢则将发球权给B

else:if random()

scoreB+=1

else:

scoreA+=1serving="B"

return scoreA,scoreB

而在simOneGame()函数中,又进一步设计了gameOver()函数,它是用来判断一场比赛是否结束

defgameOver(scoreA,scoreB,abilityA,abilityB):if (scoreA==21 and scoreB<20) or (scoreA<20 and scoreB==21):return True #21分制

if scoreA==30 or scoreB==30:return True #谁先达到30分谁赢

if scoreA==20 and scoreB==20: #A和B都为20分的情况

againA,againB=0,0

serving="A" #同simOneGame()函数相同

if serving=="A":if random()

againA+=1

else:

againB+=1serving="B"

else:if random()

againB+=1

else:

againA+=1serving="B"

return againA==againB+2 or againB==againA+2 #谁先领先对方2分谁赢

else:return False

用printoutcome()函数打印比赛的结果

defprintoutcome(winsA,winsB):

n=winsA+winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))

将所有的函数组装起来,就能得到解决该问题的程序:

from random importrandomdefmain():

printinput()

abilityA,abilityB,n=getinput()

winsA,winsB=simNGames(n,abilityA,abilityB)

printoutcome(winsA,winsB)defprintinput():print("这个程序模拟两个选手A和B的羽毛球比赛")print("该程序需要选手A和B的能力值(以0到1之间的小数表示)")defgetinput():

a=eval(input("请输入选手A的能力值(0-1):"))

b=eval(input("请输入选手B的能力值(0-1):"))

n=eval(input("模拟比赛的场次:"))returna,b,ndefsimNGames(n,abilityA,abilityB):

winsA,winsB=0,0for i inrange(n):

scoreA,scoreB=simOneGame(abilityA,abilityB)if scoreA>scoreB:

winsA+=1

else:

winsB+=1

returnwinsA,winsBdefsimOneGame(abilityA,abilityB):

scoreA,scoreB=0,0

serving="A"

while notgameOver(scoreA,scoreB,abilityA,abilityB):if serving=="A":if random()

scoreA+=1

else:

scoreB+=1serving="B"

else:if random()

scoreB+=1

else:

scoreA+=1serving="B"

returnscoreA,scoreBdefgameOver(scoreA,scoreB,abilityA,abilityB):if (scoreA==21 and scoreB<20) or (scoreA<20 and scoreB==21):returnTrueif scoreA==30 or scoreB==30:returnTrueif scoreA==20 and scoreB==20:

againA,againB=0,0

serving="A"

if serving=="A":if random()

againA+=1

else:

againB+=1serving="B"

else:if random()

againB+=1

else:

againA+=1serving="B"

return againA==againB+2 or againB==againA+2

else:returnFalsedefprintoutcome(winsA,winsB):

n=winsA+winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))

main()

运行结果如下:

python比赛_Python 预测球队比赛成绩相关推荐

  1. Python大数据预测NBA比赛结果

    大数据带给我们的是一种生活.工作和思维上的大变革, 当下,NBA季后赛打的正如火如荼,各位球迷肯定希望能提前预测自己喜欢的球队能不能杀入总决赛,拿到总冠军. 今晚,黑马程序员李老师,将为大家带来免费公 ...

  2. python 比赛成绩预测_Python预测NBA比赛结果

    下载W3Cschool手机App,0基础随时随地学编程导语 利用Python简单地预测一下NBA比赛结果... 这大概就叫蹭热度吧... 毕竟貌似今天朋友圈都在刷NBA相关的内容... 虽然我并不能看 ...

  3. python 比赛成绩预测_预测球队比赛成绩

    本文尝试采用自顶向下的设计方法进行体育竞技分析.自顶向下即将一个复杂问题分解成几个问题,再细分成一个个具体的小问题,从而来解决复杂问题. 一.采用乒乓球比赛规则(学号尾号为3必做题) 比赛规则:(1) ...

  4. python 比赛成绩预测_使用Python进行体育竞技分析(预测球队成绩)

    今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析的IPO模式 : 输入I(input):两个球员的能力值,模拟比赛的次数(其中,运动员的能力值,可以通过发球方赢得本回合的概率来 ...

  5. python体育竞技分析代码200行_使用Python进行体育竞技分析(预测球队成绩)

    使用Python进行体育竞技分析(预测球队成绩) 发布时间:2020-09-18 06:38:27 来源:脚本之家 阅读:69 今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析 ...

  6. python选手的最后得分_用Python进行体育竞技分析(预测球队成绩)!身家都下注了!...

    今天我们用python进行体育竞技分析,预测球队成绩 一. 体育竞技分析的IPO模式 : 输入I(input):两个球员的能力值,模拟比赛的次数(其中,运动员的能力值,可以通过发球方赢得本回合的概率来 ...

  7. Python 预测 NBA 比赛结果

    Python 预测 NBA 比赛结果 一. 内容介绍 不知道你是否在朋友圈被刷屏过 NBA 的某场比赛进度或者结果?或者你就是一个 NBA 狂热粉,比赛中的每个进球.抢断或是逆转压哨球都能让你热血沸腾 ...

  8. NBA比赛结果预测 # 编程大事件 # 嵩天 # python #

    NBA 比赛结果预测 一.项目背景 1.数据分析 数据分析是一个检查.清理.转换和建模数据的过程,其目标是发现有用的信息.得出结论并支持决策制定.数据分析具有多个方面和方法,包括各种名称下的多种技术, ...

  9. Python开发案例,pandas模块使用,实现预测NBA比赛结果

    主要思路 (1)数据选取 获取数据的链接为: https://www.basketball-reference.com/ 获取的数据内容为: 每支队伍平均每场比赛的表现统计: 每支队伍的对手平均每场比 ...

最新文章

  1. python threading模块多线程源码示例(二)
  2. 「3」Java开发环境搭建
  3. WinAPI: GetUserName - 获取当前用户名
  4. Java web登录拦截器_SpringMVC拦截器(实现登录验证拦截器)
  5. [Python]从哪里开始学习写代码(未完待续)
  6. .net 2.0 只读TextBox取值问题
  7. python,web框架说明
  8. DRV8833直流电机驱动模块代替 TB6612FNG电机驱动
  9. uptool u盘量产工具 v2.093
  10. Ubuntu18.04安装carla0.9.9 UE4.24踩坑版
  11. 数据防泄密方案与需求匹配程度分析
  12. lightning接口_新iPhone或将使用TypeC接口~
  13. 文件服务器如何异地备份,实战演示如何进行异地自动备份数据库
  14. 数字图像处理知识点梳理——第八章 图像压缩
  15. 【迭代器】迭代器相应型别
  16. ubuntu wps缺少字体_一个字体:系统风汜霰更纱黑
  17. 通用型系统架构设计(多图)
  18. 【140813】C# 仿QQ农场游戏源代码
  19. 2021江苏泰州中学高考成绩查询,泰州中学排名前十名,2021年泰州中学排名一览表...
  20. 如何使用phpunit运行单一测试方法?

热门文章

  1. 又一例 瑞士量子技术公司完成7500万美元融资
  2. linux+唤醒windows,Linux系统与Windows系统下的网络唤醒
  3. PicGo+GitHub+jsDelivr搭建免费cdn加速图床
  4. csdn markdown写博客技巧
  5. ubuntu20 deb包安装安装中心显示无法支持
  6. 计算机的软件系统可以对硬盘进行,对硬盘损伤最大的六大软件 -电脑资料
  7. 报错日志1:terminate called after throwing an instance of ‘ros::TimeNotInitializedException‘——ROS项目报错
  8. 【JavaSE】Java(五十五):核心要点总结
  9. 数量性状基因座QTL及其作图
  10. CodeForces 305C Ivan and Powers of Two【set】