1 #羽毛球比赛预测
2 from random import random
3 def printTips():
4 print("这个程序模拟两个选手A和B进行羽毛球比赛")
5 print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
6 def getInputs():
7 a = eval(input("请输入选手A的能力值(0-1): "))
8 b = eval(input("请输入选手B的能力值(0-1): "))
9 n = eval(input("模拟羽毛球比赛的场次: "))
10 return a, b, n
11 def ModelNGames(n, powerA, powerB):
12 winsA, winsB = 0, 0
13 for i in range(n):
14 scoreA, scoreB = ModelOneGame(powerA, powerB)
15 if scoreA > scoreB:
16 winsA += 1
17 else:
18 winsB += 1
19 return winsA, winsB
20 def gameOver(a,b):
21 return a==15 or b==15
22 def ModelOneGame(powerA, powerB):
23 scoreA, scoreB = 0, 0
24 serving = "A"
25 while not gameOver(scoreA, scoreB):
26 if serving == "A":
27 if random() < powerA:
28 scoreA += 1
29 else:
30 serving="B"
31 else:
32 if random() < powerB:
33 scoreB += 1
34 else:
35 serving="A"
36 return scoreA, scoreB
37 def printResult(winsA, winsB):
38 n = winsA + winsB
39 print("共模拟了{}场羽毛球比赛".format(n))
40 print("选手A获胜{}场比赛,模拟赛胜率{:0.1%}".format(winsA, winsA/n))
41 print("选手B获胜{}场比赛,模拟赛胜率{:0.1%}".format(winsB, winsB/n))
42 def main():
43 printTips()
44 powerA, powerB, n = getInputs()
45 winsA, winsB = ModelNGames(n, powerA, powerB)
46 printResult(winsA, winsB)
47 main()
![]()