模拟体育竞技分析
from random import random # 打印程序介绍信息 def printIntro(): print("信计52号进行比赛分析结果:") print("这是团体赛模拟程序:") # 获得程序运行参数 def getInputs(): a = eval(input("请输入队伍A的能力值(0-1): ")) b = eval(input("请输入队伍B的能力值(0-1): ")) n = eval(input("模拟比赛的场次: ")) return a, b, n # 进行N场比赛 def simNGames(n, probA, probB): 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): return a == 11 or b == 11 def gameOver2(a, b): # 进行抢12比赛结束 return a == 12 or b == 12 # 进行一场比赛 def simOneGame(probA, probB): scoreA, scoreB = 0, 0 # 初始化AB的得分 serving = "A" while not gameOver(scoreA, scoreB): # 用while循环来执行比赛 if scoreA == 10 and scoreB == 10: return(simtwoGame2(probA,probB)) if serving == "A": if random() < probA: # 用随机数生成胜负 scoreA += 1 else: serving = "B" else: if random() < probB: scoreB += 1 else: serving="A" return scoreA, scoreB def simtwoGame2(probA,probB): scoreA, scoreB=10, 10 serving = "A" # 假如先让队伍A发球 while not gameOver2(scoreA, scoreB): 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()
运行结果: