from random import random def printIntro(): print("模拟羽毛球比赛 08") def getInputs(): a = eval(input("A的能力值:")) b = eval(input("B的能力值:")) n = eval(input("场次:")) return a,b,n def gameOver(scoreA,scoreB): return (max(scoreA,scoreB)==21 and min(scoreA,scoreB)<20) or (max(scoreA,scoreB)==30) or (scoreA>20 and scoreB>20 and max(scoreA,scoreB)-min(scoreA,scoreB)>1) 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 simNGame(n,probA,probB): winsA,winsB = 0,0 for i in range(n): if winsA<(n//2)+1 and winsB<(n//2)+1: scoreA,scoreB = simOneGame(probA,probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 else: break return winsA,winsB def printSummary(winsA,winsB): n = winsA + winsB if winsA > winsB: X = "A" else: X = "B" print("共模拟了{}场比赛".format(n)) print("A获胜{}场,占比{:0.1%}".format(winsA,winsA/n)) print("B获胜{}场,占比{:0.1%}".format(winsB,winsB/n)) print("{}获胜".format(X)) def main(): printIntro() probA,probB,n = getInputs() winsA,winsB = simNGame(n,probA,probB) printSummary(winsA,winsB) main()
原文:https://www.cnblogs.com/ssh-4016/p/12751544.html