模拟乒乓球竞技分析
from random import random def printIntro(): #打印程序介绍信息 print("乒乓球竞技分析") 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("模拟比赛的场次: ")) raceType = eval(input("比赛类型:1为单打,2为双打 ")) return a, b, n, raceType def simNGames(n, probA, probB, raceType): # 进行N场比赛 winsA, winsB = 0, 0 if raceType == 1: 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 else: for i in range(n): for j in range(5): #进行5局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 ,raceType= getInputs() winsA, winsB = simNGames(n, probA, probB, raceType) printSummary(winsA, winsB) main()
乒乓球竞技分析
这个程序模拟两个队伍A和B乒乓球比赛
程序运行需要队伍A和队伍B的能力值(以0到1之间的小数表示)
请输入队伍A的能力值(0-1): 0.5
请输入队伍B的能力值(0-1): 0.5
模拟比赛的场次: 1
比赛类型:1为单打,2为双打 1
竞技分析开始,共模拟7场比赛
队伍A获胜4场比赛,占比57.1%
队伍B获胜3场比赛,占比42.9%

浙公网安备 33010602011771号