# -*- encoding:utf-8 -*-'''模擬羽毛球競技
'''# 比賽規則:
# 2. 前四局採用21分制,每個隊只有在贏得至少21分,且同時超過對方2分時才勝一局
from random import random
from time import time
def printinfo():
'''function: 列印程式的介紹資訊
'''print("".format("產品簡介"))
print("產品名稱: 羽毛球競技模擬分析器")
print("產品概述: 通過輸入2個隊伍a和b的能力值(0到1之間的小數表示),能夠模擬多次2個隊伍a和b的排球競技比賽,從而得出各自的勝率!")
print("".format("模擬開始"))
def getinputs():
'''function: 獲得使用者輸入的引數
'''proba = eval(input("請輸入隊伍a的能力值(0~1):"))
probb = eval(input("請輸入隊伍b的能力值(0~1):"))
n = eval(input("請輸入需要模擬比賽的場次數:"))
return proba, probb, n
def printresult(n, winsa, winsb):
'''function: 輸出模擬比賽的結果
'''print("".format("模擬結束"))
print("競技分析開始,共模擬{}場比賽。".format(n))
print(">>>隊伍a獲勝{}場比賽,佔比".format(winsa,winsa/n))
print(">>>隊伍b獲勝{}場比賽,佔比".format(winsb,winsb/n))
def simngames(n, proba, probb):
'''function: 模擬n場比賽
n: 模擬n場比賽
proba, probb: 分別為隊伍a和b的能力值
wina, winb: 隊伍a和b在一場比賽中獲勝的局數
winsa, winsb: 隊伍a和b贏得比賽的場數,總共n場
'''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):
'''function: 模擬一場比賽,包括五局,採取五局三勝制
proba, probb: 分別為隊伍a和b的能力值
return: 返回隊伍a和b在本場比賽中獲勝的局數
scorea, scoreb: 分別為隊伍a和b一局比賽獲得的分數
wina, winb: 分別為隊伍a和b一場比賽獲勝的局數
n: 代表本次比賽的局次
'''wina, winb = 0, 0
for n in range(5):
scorea, scoreb = simagame(n, proba, probb)
if scorea > scoreb:
wina += 1
else:
winb += 1
if wina == 3 or winb == 3:
break
return wina, winb
def simagame(n, proba, probb):
'''function: 模擬一局比賽
n: 代表本次比賽的局次
proba, probb: 分別為隊伍a和b的能力值
return: 返回隊伍a和b在本局比賽中獲得的分數
'''scorea, scoreb = 0, 0 # 分別為隊伍a和b一局比賽獲得的分數
serving = 'a' # 發球方
while not gameover(n, scorea, scoreb):
if serving == 'a':
if random() > proba:
scoreb += 1
serving = 'b'
else:
scorea += 1
else:
if random() > probb:
scorea += 1
serving = 'a'
else:
scoreb += 1
return scorea, scoreb
def gameover(n, scorea, scoreb):
'''function: 定義一局比賽的結束條件
n: 代表當前局次
return: 若比賽結束的條件成立返回真,否則為假
'''if n <= 100000:
return (scorea>=21 and abs(scorea-scoreb)>=2) or (scoreb>=21 and abs(scorea-scoreb)>=2)
if __name__ == "__main__":
printinfo()
proba, probb, n = getinputs()
time = time()
winsa, winsb = simngames(n, proba, probb)
print("模擬用時: s".format(time()-time))
printresult(n, winsa, winsb)
模擬體育競技
一.體育競技分析的ipo模式 輸入i input 兩個球員的能力值,模擬比賽的次數 其中,運動員的能力值,可以通過發球方贏得本回合的概率來表示,乙個能力值為0.8的球員,在他發球時,有80 的可能性贏得1分 處理p process 模擬比賽過程 輸出o output 兩個球員獲勝的概率 自頂向下的設...
模擬體育競技分析
coding utf 8 created on tue jun 9 11 18 48 2020 author 13549 from random import random 第一階段 defprintintro print 模擬兩個選手a和b的羽毛球比賽 print 程式執行需要a和b的能力值 以0...
模擬體育競技分析
比賽規則 1.採用5局3勝制 2.前四局採用25分制,每個隊只有在贏得至少25分,且同時超過對方2分時才勝一局 3.決勝局 第五局 採用15分制,先獲得15分,且同時超過對方2分為勝 from random import random defgetinputs 獲得使用者輸入的引數 a eval i...