# 体育竞技 from random import random def printInfo(): print("模拟两个选手A和B的羽毛球竞技比赛") print("程序需要两个选手的能力值0-1") print("规则:三局两胜--21分制") print("作者:37李长宇") def getInput(): a = eval(input("请输入选手A的能力值(0-1):")) b = eval(input("请输入选手B的能力值(0-1):")) m = eval(input("比赛的局数:")) n = eval(input("模拟比赛的场次:")) return a, b, m, n 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 simNGames(m, n, probA, probB): winsA, winsB = 0, 0 wa, wb = 0, 0 for i in range(n): for i in range(m): scoreA, scoreB = simOneGame(probA, probB) if scoreA > scoreB: wa += 1 else: wb += 1 if wa == 2: winsA += 1 wa, wb = 0, 0 break if wb == 2: winsB += 1 wa, wb = 0, 0 break return winsA, winsB def simOneGame(probA, probB): scoreA, scoreB = 0, 0 serving = "A" while not gameOver(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 gameOver(a, b): if (a >= 20 or b >= 20): if (abs(a - b) == 2 and a <= 29 and b <= 29): return True else: return a == 30 or b == 30 else: return False def main(): printInfo() probA, probB, m, n = getInput() winsA, winsB = simNGames(m, n, probA, probB) printSummary(winsA, winsB) main()



浙公网安备 33010602011771号