b.採用排球比賽規則(學號尾號爲4,5,6同窗必作及格題)

from random import random
def printIntro():
    print("36號程序員的程序模擬兩個選手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(n):
        scoreA,scoreB=simOneGame(probA,probB)
        if scoreA>scoreB:
            winsA+=1
        else:
            winsB+=1
    return winsA,winsB
def gameOver1(a,b):
    return (a>=25 and a-b>2) or (b>=25 and b-a>2)
def gameOver2(a,b):
    return (a>=15 and a-b>2) or (b>=15 and b-a>2)
def simOneGame(probA,probB):
    
    for i in range (5):
        winsA,winsB=0,0
        scoreA,scoreB=0,0
        serving="A"
        while not gameOver1(scoreA,scoreB):
            if serving=="A":
                if random()<probA:
                    scoreA+=1
                else:
                    scoreB+=1
                    serving="B"
            else:
                if random()<probB:
                    scoreB+=1
                else:
                    serving="A"
                    scoreA+=1
            if scoreA>scoreB:
                winsA+=1
            else:
                winsB+=1
            if winsA==3 or winsB==3:
                break
            if winsA==2 and winsB==2:
                simtowGame(probA,probB)
    return winsA,winsB
def simtowGame(probA,probB):
    
    for i in range (1):
        scoreA,scoreB=0,0
        serving="A"
        while not gameOver2(scoreA,scoreB):
            if serving=="A":
                if random()<probA:
                    scoreA+=1
                else:
                    scoreB+=1
                    serving="B"
            else:
                if random()<probB:
                    scoreB+=1
                else:
                    serving="A"
                    scoreA+=1
    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()
相關文章
相關標籤/搜索