首页 > 其他 > 详细

模拟乒乓球双打和单打比赛

时间:2020-05-13 16:46:01      阅读:45      评论:0      收藏:0      [点我收藏+]

规则:单打七局四胜,双打五局三胜。单局:先得11分者胜;若11平,则先多得2分者胜。

乒乓球赛单打预测:

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):"))
    return a,b
def simNGames(probA,probB):
    winsA,winsB=0,0
    for i in range(7):
        scoreA,scoreB=simOneGame(probA,probB)
        if scoreA>scoreB:
            winsA+=1
            if winsA==4:
                break
        else:
            winsB+=1
            if winsB==4:
                break
    return winsA,winsB
def gameOver(a,b):
    return a==11 or b==11
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 printSummary(winsA,winsB):
    n=winsA+winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:.1%}".format(winsA,winsA/n))
    print("选手B获胜{}场比赛,占比{:.1%}".format(winsB,winsB/n))
def main():
    printIntro()
    probA,probB = getInputs()
    winsA,winsB = simNGames(probA,probB)
    printSummary(winsA,winsB)
main()

 

乒乓球赛双打预测:

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):"))
    return a,b
def simNGames(probA,probB):
    winsA,winsB=0,0
    for i in range(5):
        scoreA,scoreB=simOneGame(probA,probB)
        if scoreA>scoreB:
            winsA+=1
            if winsA==3:
                break
        else:
            winsB+=1
            if winsB==3:
                break
    return winsA,winsB
def gameOver(a,b):
    return a==11 or b==11
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 printSummary(winsA,winsB):
    n=winsA+winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:.1%}".format(winsA,winsA/n))
    print("选手B获胜{}场比赛,占比{:.1%}".format(winsB,winsB/n))
def main():
    printIntro()
    probA,probB = getInputs()
    winsA,winsB = simNGames(probA,probB)
    printSummary(winsA,winsB)
main()

 

模拟乒乓球双打和单打比赛

原文:https://www.cnblogs.com/2640335699qqcom/p/12883225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!