码迷,mamicode.com
首页 > 其他好文 > 详细

体育竞技分析

时间:2020-05-18 19:04:55      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:能力   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!