python博客作业2
采用乒乓球比赛规则
一局比赛:
在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。
一场比赛:
单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。
1 from random import random 2 3 def printInfo(): # 打印程序介绍信息 4 print('这个程序模拟两个选手A和B的某种竞技比赛') 5 print('程序运行需要A和B的能力值(以0到1之间的小数表示)') 6 7 def getInputs(): # 获得程序运行参数 8 a = eval(input('请输入选手A的能力值(0-1):')) 9 b = eval(input('请输入选手B的能力值(0-1):')) 10 n = eval(input('模拟比赛场次(单打淘汰赛为5场,双打淘汰赛为7场):')) 11 return a, b, n 12 13 def simOneGame(probA, probB): # 进行一场比赛 14 scoreA, scoreB = 0, 0 # 初始化AB的得分 15 serving = 'A' # 首先由A发球 16 while not gameOver(scoreA, scoreB): #用while循环来执行比赛 17 if serving == 'A': 18 if random() < probA: # random() 方法返回随机生成的一个实数,它在[0,1)范围内。 19 scoreA += 1 # 用随机数来和能力值比较从而分出胜负 20 else: 21 serving = 'B' 22 else: 23 if random() < probB: 24 scoreB += 1 25 else: 26 serving = 'A' 27 return scoreA, scoreB 28 29 def simNGames(n, probA, probB): #进行N场比赛 30 winsA, winsB = 0, 0 # 初始化AB的胜场数 31 for i in range(n): 32 scoreA, scoreB = simOneGame(probA, probB) 33 if scoreA > scoreB: 34 winsA += 1 35 else: 36 winsB += 1 37 return winsA, winsB 38 39 def gameOver(c, d): #比赛结束 40 return c==11 or d==11 41 42 def printSummary(n ,winA, winB): #打印比赛结果 43 print('竞技分析开始,共模拟{}场比赛'.format(n)) 44 print('选手A获胜{}场比赛,占比{:.2f}%'.format(winA, winA/n*100)) 45 print('选手B获胜{}场比赛,占比{:.2f}%'.format(winB, winB / n * 100)) 46 def main(): 47 printInfo() 48 probA, probB, n =getInputs() 49 winsA, winsB = simNGames(n, probA, probB) 50 printSummary(n, winsA, winsB) 51 52 print("\n学号:21\n")53 main()
输出结果:
单打淘汰赛5场:
双打淘汰赛7场: