标签:能力 for ret pre eva ima nsa color bre
from random import random def printIntro(): print("这个程序模拟两个球队A和B的排球竞技比赛") print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
def getInputs(): a=eval(input("请输入球队A的能力值(0-1):")) b=eval(input("请输入球队B的能力值(0-1):")) n=eval(input("模拟比赛的场次:")) return a,b,n def printSummary(winsA,winsB): n=winsA+winsB print("{:*^70}".format("模拟结束")) print("竞技分析开始,共模拟{}场比赛".format(n)) print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n)) print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n)) def GameOver(N,scoreA,scoreB): if N <= 4: return (scoreA>=25 and scoreB>=25 and abs(scoreA-scoreB)>=2) else: return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2) def simAGame(N,probA,probB): scoreA,scoreB=0,0 serving="A" while not GameOver(N,scoreA,scoreB): if serving=="A": if random() > probA: scoreB+=1 serving="B" else: scoreA+=1 else: if random() > probB: scoreA+=1 serving="A" else: scoreB+=1 return scoreA,scoreB def simOneGame(probA,probB): winA,winB=0,0 for N in range(5): scoreA,scoreB=simAGame(N,probA,probB) if scoreA > scoreB: winA+=1 else: winB+=1 if winA==3 or winB==3: break return winA,winB def simNGames(n,probA,probB): winsA,winsB=0,0 for i in range(n): winA,winB=simOneGame(probA,probB) if winA > winB: winsA+=1 else: winsB+=1 return winsA,winsB def main(): printIntro() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB) main()
标签:能力 for ret pre eva ima nsa color bre
原文地址:https://www.cnblogs.com/dongyichen/p/12911991.html