标签:bsp format 运行 games rand 比赛 form header def
1. 21 分制,3局2胜为佳
2. 每球得分制
3. 每回合中,取胜的一方加 1 分
4. 当双方均为 20 分时,领先对方 2 分的一方赢得该局比赛
5. 当双方均为 29 分时,先取得 30 分的一方赢得该局比赛
6. 一局比赛的获胜方在下一局率先发球
程序:
1 from random import random 2 def printIntro(): 3 print("这个程序模拟两个选手A和B的羽毛球比赛(学号3017)") 4 print("程序运行需要A和B的能力值(以0到1之间的小数表示)") 5 def getInputs(): 6 a = eval(input("请输入选手A的能力值(0-1): ")) 7 b = eval(input("请输入选手B的能力值(0-1): ")) 8 n = eval(input("模拟比赛的场次: ")) 9 return a, b, n 10 def simNGames(n, probA, probB): 11 winsA, winsB = 0, 0 12 for i in range(n): 13 scoreA, scoreB = simOneGame(probA, probB) 14 if scoreA > scoreB: 15 winsA += 1 16 else: 17 winsB += 1 18 return winsA, winsB 19 def gameOver(a,b): 20 if(a>=20 or b>=20): 21 if(abs(a-b)==2 and a<=29 and b<=29): 22 return True 23 else: 24 return a==30 or b==30 25 else: 26 return False 27 def simOneGame(probA, probB): 28 scoreA, scoreB = 0, 0 29 serving = "A" 30 while not gameOver(scoreA, scoreB): 31 if serving == "A": 32 if random() < probA: 33 scoreA += 1 34 else: 35 serving="B" 36 else: 37 if random() < probB: 38 scoreB += 1 39 else: 40 serving="A" 41 return scoreA, scoreB 42 def printSummary(winsA, winsB): 43 n = winsA + winsB 44 print("竞技分析开始,共模拟{}场比赛".format(n)) 45 print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n)) 46 print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n)) 47 def main(): 48 printIntro() 49 probA, probB, n = getInputs() 50 winsA, winsB = simNGames(n, probA, probB) 51 printSummary(winsA, winsB) 52 main()
模拟结果
标签:bsp format 运行 games rand 比赛 form header def
原文地址:https://www.cnblogs.com/jxt666/p/12942875.html