程式設計 排球

2022-07-09 03:54:13 字數 3102 閱讀 2306

#

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