用python模拟球赛

两个球员在一个有 4面边界的场地上用球拍击球。开始比赛时,其中一个球员首先发球。 接下来球员交替击球,直到可以判定得分为止,这个过程称为回合。当一名球员未能进行一次合法击打时,回合结束。未能打中球的球员输掉这个回合。如果输掉这个回合的是发球方,那么发球权交给另方;如果输掉的是接球方,则仍然由这个回合的发球方继续发球。总之,每回合结束,由赢得该回合的一方发球。球员只能在他们自己的发球局中得分。首先达到15分的球员赢得一局比赛。

from random import random
def printIntro():
    print("这个程序模拟A,B两个选手的比赛:\n")
    print("这个程序的实现需要知道A,B两个选手的能力值,该值为0-1之间的小数:\n")
def getInputs():
    probA = eval(input("请输入A的能力值:"))
    probB = eval(input("请输入B的能力值:"))
    n=int(input("请输入比赛场次:"))
    return probA,probB,n
def printSummary(winsA,winsB):
    print("预计A会赢得{}场比赛".format(winsA))
    print("预计B会赢得{}场比赛".format(winsB))
def simNGames(probA,probB,n):
    winsA,winsB=0,0
    for i in range(n):
        scoreA,scoreB=simOneGame(probA,probB)
        if(scoreA>scoreB):
            winsA+=1
        else:
            winsB+=1
    return winsA,winsB
def simOneGame(probA,probB):
    scoreA,scoreB=0,0
    serve='A'
    while not onegameOver(scoreA,scoreB):
        if (serve=='A'):
            if(random()<=probA):
                scoreA += 1
            else:
                serve='B'
        if (serve=='B'):
            if(random()<=probB):
                scoreB += 1
            else:
                serve='A'
    return scoreA,scoreB
def onegameOver(a,b):
    return a==15 or b==15
probA,probB,n=getInputs()
winsA,winsB=simNGames(probA,probB,n)
printSummary(winsA,winsB)


版权声明:本文为qq_51666744原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。