#-*- encoding:utf-8 -*-
defprintinfo():
'''function: 列印程式的介紹資訊
'''print("
".format("
產品簡介"))
print("
體育競技分析(排球)")
print("
學號:26")
print("
".format("
模擬開始"))
from random import
random
from time import
time
defgetinputs():
'''function: 獲得使用者輸入的引數
'''proba = eval(input("
請輸入隊伍a的能力值(0~1):"))
probb = eval(input("
請輸入隊伍b的能力值(0~1):"))
n = eval(input("
請輸入需要模擬比賽的場次數:"))
return
proba, probb, n
defprintresult(n, winsa, winsb):
'''function: 輸出模擬比賽的結果
'''print("
".format("
模擬結束"))
print("
競技分析開始,共模擬{}場比賽。
".format(n))
print("
>>>隊伍a獲勝{}場比賽,佔比
".format(winsa,winsa/n))
print("
>>>隊伍b獲勝{}場比賽,佔比
".format(winsb,winsb/n))
defsimngames(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
defsimonegame(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
defsimagame(n, proba, probb):
'''function: 模擬一局比賽
n: 代表本次比賽的局次
proba, probb: 分別為隊伍a和b的能力值
return: 返回隊伍a和b在本局比賽中獲得的分數
'''scorea, scoreb =0, 0
serving = 'a'
while
notgameover(n, scorea, scoreb):
if serving == 'a'
:
if random() >proba:
scoreb += 1serving = 'b'
else
: scorea += 1
else
:
if random() >probb:
scorea += 1serving = 'a'
else
: scoreb += 1
return
scorea, scoreb
defgameover(n, scorea, scoreb):
'''function: 定義一局比賽的結束條件
n: 代表當前局次(第五局為決勝局)
return: 若比賽結束的條件成立返回真,否則為假
'''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("
模擬用時: s