排球訓練營
1. 簡介: 模擬不同的兩個隊伍進行排球的模擬比賽。
2. 模擬原理: 通過輸入各自的能力值(Ⅰ),模擬比賽的進行( P ),最后輸出模擬的結果( O )。
P 簡介:通過產生隨機數得到每局比賽的難度,若小于能力值則表示贏得本局比賽,反之輸掉本局比賽。
3. 規則簡介:
① 每場比賽采用 5局3勝制。
② 前四局采用25分制,每個隊只有在贏得至少25分,且同時超過對方2分時才勝一局。
③ 決勝局(第五局)采用15分制,先獲得15分,且同時超過對方2分為勝。
4. 準備就緒,就差代碼來實現了
插入代碼之前,先對代碼做個簡單的介紹:
| 函數名稱 | 函數說明 |
| printInfo() | 打印程序的介紹信息 |
| getInputs() | 獲得用戶輸入的參數 |
| simNGames(n, probA, probB) | 模擬n場比賽 |
| simOneGame(probA, probB) | 模擬一場比賽,包括五局,采取五局三勝制 |
| simAGame(N, probA, probB) | 模擬一局比賽 |
| GameOver(N, scoreA, scoreB) | 定義一局比賽的結束條件 |
| printResult(n, winsA, winsB) | 輸出模擬比賽的結果 |
好了,看看代碼吧,雖然有點長,但應該可以看懂 ^_^
from random import random def printInfo(): print("產品名稱: 排球競技模擬分析器") print("產品概述: 通過輸入2個隊伍A和B的能力值(0到1之間的小數表示),能夠模擬多次2個隊伍A和B的排球競技比賽,從而得出各自的勝率!") print("產品作者: 孔明最帥 - 34\n") def getInputs(): probA = eval(input("請輸入隊伍A的能力值(0~1):")) probB = eval(input("請輸入隊伍B的能力值(0~1):")) n = eval(input("請輸入需要模擬比賽的場次數:")) return probA, probB, n def simNGames(n, probA, probB): winsA, winsB = 0, 0 for _ in range(n): winA, winB = simOneGame(probA, probB) if winA > winB: winsA += 1 else: winsB += 1 return winsA, winsB def simOneGame(probA, probB): N = 1 winA, winB = 0, 0 for _ in range(5): scoreA, scoreB = simAGame(N, probA, probB) if scoreA > scoreB: winA += 1 else: winB += 1 N += 1 if winA == 3 or winB == 3: break return winA, winB def simAGame(N, probA, probB): scoreA, scoreB = 0, 0 serving = 'A' while not GameOver(N, scoreA, scoreB): if serving == 'A': if random() > probA: scoreB += 1 serving = 'B' else: scoreA += 1 if serving == 'B': if random() > probB: scoreA += 1 serving = 'A' else: scoreB += 1 return scoreA, scoreB def GameOver(N, scoreA, scoreB): if N <= 4: return (scoreA>=25 and scoreB>=25 and abs(scoreA-scoreB)>=2) else: return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2) def printResult(n, winsA, winsB): print("競技分析開始,共模擬{}場比賽。".format(n)) print(">>>隊伍A獲勝{}場比賽,占比{:.2f}".format(winsA,winsA/n)) print(">>>隊伍B獲勝{}場比賽,占比{:.2f}".format(winsB,winsB/n)) if __name__ == "__main__": printInfo() probA, probB, n = getInputs() winsA, winsB = simNGames(n, probA, probB) printResult(n, winsA, winsB)
運行的結果是:

浙公網安備 33010602011771號