羽毛球比賽模擬

2022-07-11 18:54:08 字數 2947 閱讀 3815

# -*- 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))

python簡單羽毛球比賽模擬

體育競技 from random import random def printinfo print 這個程式模擬兩個選手a和b的羽毛球競技比賽 print 程式需要兩個選手的能力值0 1 print 規則 三局兩勝 21分制 print 學號09 def getinput a eval input...

羽毛球比賽規則

羽毛球比賽規則 計分方法 羽毛球世界聯合會於2006年5月在日本東京舉行的年度代表大會上,正式決定實行二十一分的新賽制。2006年5月在日本東京舉行的湯姆斯盃和尤伯盃賽上率先試行三局二十一分的賽制。這一賽制將成為今後所有羽毛球國際大賽的通用賽制,第29屆奧運會也將採用這一賽制。二十一分的賽制對於提高...

羽毛球比賽中羽毛球擦網和卡網(掛網)怎麼判罰?

一 發球擦網的幾種情況 1 發球擦網後,球落入接發球區,算好球,正常比賽。2 如果發球擦網後,球沒有落入接發球區或出界,則發球方失分。3 發球擦網後,球沒有過網,落入己方場地內,則發球方失分。二 回合擊球擦網的情況 1 擊球擦網後,球落入對方的有效區域內,則擊球方得分。2 擊球擦網後,球沒有落入對方...