生活随笔
收集整理的這篇文章主要介紹了
模拟排球比赛
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.基本思維
2.代碼輸入:
# 比賽規(guī)則:
# 1. 采用5局3勝制
# 2. 前四局采用25分制,每個(gè)隊(duì)只有在贏得至少25分,且同時(shí)超過對(duì)方2分時(shí)才勝一局
# 3. 決勝局(第五局)采用15分制,先獲得15分,且同時(shí)超過對(duì)方2分為勝from random import random
from time import time
def printInfo():'''function: 打印程序的介紹信息'''print("{:*^70}".format("產(chǎn)品簡介"))print("產(chǎn)品名稱: 排球競技模擬分析器")print("產(chǎn)品概述: 通過輸入2個(gè)隊(duì)伍A和B的能力值(0到1之間的小數(shù)表示),能夠模擬多次2個(gè)隊(duì)伍A和B的排球競技比賽,從而得出各自的勝率!")print("產(chǎn)品作者:雷成明—35")print("{:*^70}".format("模擬開始"))def getInputs():'''function: 獲得用戶輸入的參數(shù)'''probA = eval(input("請(qǐng)輸入隊(duì)伍A的能力值(0~1):"))probB = eval(input("請(qǐng)輸入隊(duì)伍B的能力值(0~1):"))n = eval(input("請(qǐng)輸入需要模擬比賽的場次數(shù):"))return probA, probB, ndef printResult(n, winsA, winsB):'''function: 輸出模擬比賽的結(jié)果'''print("{:*^70}".format("模擬結(jié)束"))print("競技分析開始,共模擬{}場比賽。".format(n))print(">>>隊(duì)伍A獲勝{}場比賽,占比{:0.1%}".format(winsA,winsA/n))print(">>>隊(duì)伍B獲勝{}場比賽,占比{:0.1%}".format(winsB,winsB/n))def simNGames(n, probA, probB):'''function: 模擬n場比賽n: 模擬n場比賽probA, probB: 分別為隊(duì)伍A和B的能力值winA, winB: 隊(duì)伍A和B在一場比賽中獲勝的局?jǐn)?shù)winsA, winsB: 隊(duì)伍A和B贏得比賽的場數(shù),總共n場'''winsA, winsB = 0, 0for _ in range(n):winA, winB = simOneGame(probA, probB)if winA > winB:winsA += 1else:winsB += 1return winsA, winsBdef simOneGame(probA, probB):'''function: 模擬一場比賽,包括五局,采取五局三勝制probA, probB: 分別為隊(duì)伍A和B的能力值return: 返回隊(duì)伍A和B在本場比賽中獲勝的局?jǐn)?shù)scoreA, scoreB: 分別為隊(duì)伍A和B一局比賽獲得的分?jǐn)?shù)winA, winB: 分別為隊(duì)伍A和B一場比賽獲勝的局?jǐn)?shù)N: 代表本次比賽的局次'''winA, winB = 0, 0for N in range(5):scoreA, scoreB = simAGame(N, probA, probB)if scoreA > scoreB:winA += 1else:winB += 1if winA == 3 or winB == 3:breakreturn winA, winBdef simAGame(N, probA, probB):'''function: 模擬一局比賽N: 代表本次比賽的局次probA, probB: 分別為隊(duì)伍A和B的能力值return: 返回隊(duì)伍A和B在本局比賽中獲得的分?jǐn)?shù)'''scoreA, scoreB = 0, 0 # 分別為隊(duì)伍A和B一局比賽獲得的分?jǐn)?shù)serving = 'A' # 發(fā)球方while not GameOver(N, scoreA, scoreB):if serving == 'A':if random() > probA:scoreB += 1serving = 'B'else:scoreA += 1else:if random() > probB:scoreA += 1serving = 'A'else:scoreB += 1return scoreA, scoreBdef GameOver(N, scoreA, scoreB):'''function: 定義一局比賽的結(jié)束條件N: 代表當(dāng)前局次(第五局為決勝局)return: 若比賽結(jié)束的條件成立返回真,否則為假'''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)if __name__ == "__main__":printInfo()probA, probB, n = getInputs()Time = time()winsA, winsB = simNGames(n, probA, probB)print("模擬用時(shí): {:.1f}s".format(time()-Time))printResult(n, winsA, winsB)
3 運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的模拟排球比赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。