其他分享
首页 > 其他分享> > 比赛模拟-乒乓球

比赛模拟-乒乓球

作者:互联网

from random import random

def printIntro():

    print("学号:3012")

    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 simNGames(n, probA, probB):

    winsA, winsB = 0, 0

    for i in range(1,n+1):

        scoreA, scoreB = simOneGame(probA, probB)

        if scoreA > scoreB:

            winsA += 1

        else:

            winsB += 1

        if i%7==0:

            if winsA>winsB:

                winsA+=1

                print("单打第{}场胜利的为A".format(int(i/7)))

            else:

                winsB+=1

                print("单打第{}场胜利的为B".format(int(i/7)))

    return winsA, winsB

def gameOver(a,b):

    if a>=10 and b>=10:

        if abs(a-b)==2:

            return True

    if a<10 or b<10:

        if a==11 or b==11:

            return True

    else:

        return False

def simOneGame(probA, probB):

    scoreA, scoreB = 0, 0

    serving = "A"

    while not gameOver(scoreA, scoreB):

        if serving == "A":

            if random() < probA:

                scoreA += 1

            else:

                scoreB +=1

                serving="B"

        else:

            if random() < probB:

                scoreB += 1

            else:

                scoreA += 1

                serving="A"

    return scoreA, scoreB

def printSummary(winsA, winsB):

    n = winsA + winsB

    print("竞技分析开始,共模拟{}场比赛".format(n))

    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))

    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))

def main():

    printIntro()

    probA, probB, n = getInputs()

    WinsA, WinsB = simNGames(n, probA, probB)

    printSummary(WinsA, WinsB)

main()

 

标签:winsB,winsA,return,比赛,乒乓球,def,eval,print,模拟
来源: https://www.cnblogs.com/zhangfurong/p/15550541.html