比赛模拟-排球

 


 1 # 比赛规则:
 2 # 1. 采用5局3胜制
 3 # 2. 前四局采用25分制,每个队只有在赢得至少25分,且同时超过对方2分时才胜一局
 4 # 3. 决胜局(第五局)采用15分制,先获得15分,且同时超过对方2分为胜
 5 from random import random
 6 from time import time
 7 def printInfo():
 8     print("排球")
 9     print("通过输入2个队伍A和B的能力值(0到1之间的小数表示),能够模拟多次2个队伍A和B的排球竞技比赛,从而得出各自的胜率!")
10     print("姓名:黄尚越")
11     print("学号:36")
12 
13 def getInputs():
14     probA = eval(input("请输入队伍A的能力值(0~1):"))
15     probB = eval(input("请输入队伍B的能力值(0~1):"))
16     n = eval(input("请输入需要模拟比赛的场次数:"))
17     return probA, probB, n
18 
19 def simNGames(n, probA, probB):
20     winsA, winsB = 0, 0
21     for _ in range(n):
22         winA, winB = simOneGame(probA, probB)
23         if winA > winB:
24             winsA += 1
25         else:
26             winsB += 1
27     return winsA, winsB
28 
29 def simOneGame(probA, probB):
30     winA, winB = 0, 0
31     for N in range(5):
32         scoreA, scoreB = simAGame(N, probA, probB)
33         if scoreA > scoreB:
34             winA += 1
35         else:
36             winB += 1
37         if winA == 3 or winB == 3:
38             break
39     return winA, winB
40 
41 def simAGame(N, probA, probB):
42     scoreA, scoreB = 0, 0
43     serving = 'A'
44     while not GameOver(N, scoreA, scoreB):
45         if serving == 'A':
46             if random() > probA:
47                 scoreB += 1
48                 serving = 'B'
49             else:
50                 scoreA += 1
51         else:
52             if random() > probB:
53                 scoreA += 1
54                 serving = 'A'
55             else:
56                 scoreB += 1
57     return scoreA, scoreB
58 
59 def GameOver(N, scoreA, scoreB):
60     if N <= 4:
61         return (scoreA>=25 and scoreB>=25 and abs(scoreA-scoreB)>=2)
62     else:
63         return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2)
64 
65 def printResult(n, winsA, winsB):
66     print("竞技分析开始,共模拟{}场比赛。".format(n))
67     print(">>>队伍A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
68     print(">>>队伍B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
69 
70 def main():
71     printInfo()
72     probA, probB, n = getInputs()
73     winsA, winsB = simNGames(n, probA, probB)
74     printResult(n, winsA, winsB)
75 main()

 

posted @ 2023-12-28 21:58  累了睡大觉  阅读(40)  评论(0)    收藏  举报