预测羽毛球赛成绩学习笔记
任务要求:
编写程序,模拟体育竞技分析
羽毛球比赛规则
>21分制,3局2胜为佳
>每球得分制
>每回合中,取胜的一方加1分
>当双方均为20分时,领先对方2分的一方赢得该局比赛
>当双方均为29分时,先取得30分的一方赢得该局比赛
>一局比赛的获胜方在下一局率先发球
详情参考http://www.vxixi.com/
from random import random def main(): printIntro()#打印程序的介绍信息 probA, probB, n = getInputs()#通过getInput输入a,b,n winsA, winsB = simNGames(n, probA, probB)#通过simNGames()求得2个球员在n次比赛中获胜的次数 printSummary(winsA, winsB)#通过printSummary()来输出比赛的结果信息 #第二阶段 def printIntroduce(): print('这个程序模拟两个选手A和B的羽毛球竞技比赛') print('程序运行需要A和B的能力值') def getInputs(): a=eval(input('请输入选手A的能力值(0~1):')) b=eval(input('请输入选手B的能力值(0~1):')) n=eval(input('比赛胜利达到多少局获胜:')) return a,b,n def simulateNGames(n,probabilityA,probabilityB): '''定义球员A,B赢得比赛的次数,初始值为0, 通过for循环来模拟n次比赛 用simulateOneGame()来模拟一场比赛''' winsA,winsB=0,0 while not judge(n,winsA,winsB): '''返回本场比赛2个球员的得分,根据得分来确定本场比赛的胜负''' scoreA,scoreB=simulateOneGame(probabilityA,probabilityB) if scoreA>scoreB: winsA+=1 else: winsB+=1 return winsA,winsB def printSummary(winsA,winsB): n=winsA+winsB print('\n比赛开始,共模拟%d场比赛'%n) print('选手A获胜{}场比赛,占比{:0.1%}'.format(winsA,winsA/n)) print('选手B获胜{}场比赛,占比{:0.1%}'.format(winsB,winsB/n)) #第三阶段 def simulateOneGame(probabilityA,probabilityB): '''每场比赛,2个球员的得分初始为0,设定每场比赛总是A先发球, 用random函数生成一个随机小数,范围在【0,1)内''' scoreA,scoreB=0,0 starting='A' while not gameOver(scoreA,scoreB): if starting=='A': if random()<probabilityA: scoreA+=1 else: scoreB+=1 starting='B' else: if random()<probabilityB: scoreB+=1 else: scoreB+=1 starting='A' return scoreA,scoreB def gameOver(a,b): '''任意一方达到20分就结束比赛''' if a>29 or b>29: return True elif a>20 or b>20: if abs(a-b)>1: return True else: return False def judge(n,winsA,winsB): if winsA==n or winsB==n: return True else: return False main()