1. 程式人生 > 實用技巧 >模擬體育競技分析:採用乒乓球比賽規則

模擬體育競技分析:採用乒乓球比賽規則

即:

一局比賽:在一局比賽中,先得11分的一方為勝方;10平後,先多得2分的一方為勝方。

一場比賽:單打的淘汰賽採用七局四勝制,雙打淘汰賽和團體賽採用五局三勝制。

fromrandomimportrandom
#列印程式介紹資訊 defprintIntro(): print("這個程式模擬兩個選手A和B的乒乓球比賽") print("程式執行需要A和B的能力值(以0到1之間的小數表示)") #獲得程式執行引數 defprintInputs(): a=eval(input("請輸入選手A的能力值(0-1): ")) b=eval(input("請輸入選手B的能力值(0-1): ")) n=eval
(input("模擬比賽的場次: ")) returna, b, n # 進行N場比賽 defsimNGames(n, probA, probB): winsA, winsB=0,0 foriinrange(n): forjinrange(7):#進行7局4勝的比賽 scoreA, scoreB=simOneGame(probA, probB) ifscoreA > scoreB: winsA+=1 else: winsB+=1 returnwinsA,winsB #進行一場比賽 defsimOneGame(probA, probB): scoreA, scoreB=0,0#初始化AB的得分
serving="A" whilenotgameOver(scoreA, scoreB):#用while迴圈來執行比賽 ifscoreA==10andscoreB==10: return(simOneGame2(probA,probB)) ifserving=="A": ifrandom() < probA:##用隨機數生成勝負 scoreA+=1 else: serving="B" else: ifrandom() < probB: scoreB+=1 else: serving="A" returnscoreA, scoreB defsimOneGame2(probA,probB):
scoreA,scoreB=10,10 serving="A" whilenotgameOver2(scoreA, scoreB): ifserving=="A": ifrandom() < probA: scoreA+=1 else: serving="B" else: ifrandom() < probB: scoreB+=1 else: serving="A" returnscoreA, scoreB #比賽結束 defgameOver(a,b):#正常比賽結束 returna==11orb==11 defgameOver2(a,b):#進行搶12比賽結束 ifabs((a-b))>=2: returna,b #輸出資料 defprintSummary(winsA, winsB): n=winsA+winsB print("競技分析開始,共模擬{}場比賽".format(n)) print("選手A獲勝{}場比賽,佔比{:0.1%}".format(winsA, winsA/n)) print("選手B獲勝{}場比賽,佔比{:0.1%}".format(winsB, winsB/n)) #主體函式 defmain(): printIntro() probA, probB, n=printInputs() winsA, winsB=simNGames(n, probA, probB) printSummary(winsA, winsB) main()