要求:
1)模拟体育竞技分析:(不同学号选做不同题目,必做题)
a.采用乒乓球比赛规则(学号尾号为0,1,2,3同学必做及格题)。
(即:一局比赛: 在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。
一场比赛: 单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。)
1.打印程序的介绍性信息式(要求包括你们学号后两位信息)
2.输入I(input):两个球员(球队)的能力值,模拟比赛的次数
3.处理P(process):模拟比赛过程
4.输出O(output):两个球员(球队)获胜的概率(输出谁做的结果截图),
更多计分规则参考:http://www.vxixi.com/
(参照课本p223-224的代码或者https://blog.csdn.net/sxingming/article/details/51235650 https://blog.csdn.net/qq_40855366/article/details/81177203 https://blog.csdn.net/qq_40390825/article/details/82467008,只需要改gameover的函数就可以了)
"""a.采用乒乓球比赛规则(学号尾号为0,1,2,3同学必做及格题)。 (即:一局比赛:在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。 一场比赛:单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。)""" from random import random def printIntro(): #打印程序介绍信息 print("12") 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 simNGames(n, probA, probB): # 进行N场比赛 winsA, winsB= 0, 0 for i in range(n): for j in range(7): #进行7局4胜的比赛 scoreA, scoreB=simOneGame(probA, probB) if scoreA >scoreB: winsA += 1 else: winsB += 1 return winsA, winsB def gameOver(a,b): #进行抢12比赛结束 if a>=10 and b>=10: return abs(a-b)==2 #正常比赛结束 else: return a==11 or b==11 def simOneGame(probA, probB): #进行一场比赛 scoreA, scoreB= 0, 0#初始化AB的得分 serving= "A" while not gameOver(scoreA, scoreB): #用while循环来执行比赛 if serving == "A": if random()< probA: scoreA += 1 else: serving ="B" else: if random()< probB: scoreB += 1 else: serving="A" return scoreA, scoreB def printSummary(winsA, winsB): n= winsA +winsB print("竞技分析开始,共模拟{}场比赛".format(n)) print("队伍A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n)) print("队伍B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n)) def main(): printIntro() probA, probB, n=getInputs() winsA, winsB=simNGames(n, probA, probB) printSummary(winsA, winsB) main()