python自頂向下的設計方法進行體育競技分析

2021-07-11 10:06:00 字數 2994 閱讀 8337

本文嘗試採用自頂向下的設計方法進行體育競技分析。

基本規則:

兩個球員,交替用球拍擊球。一方首先具有發球權,雙方連續擊打,球落地則該回合結束。

如果輸掉這一回合的是發球方,雙方均不加分,但發球權要交給另一方。如果發球方贏得了這一回合,則發球方贏得1

分,並繼續擁有發球權。

首先到達15

分的一方贏得本局比賽,比賽總共進行

n 局。

使用python3

編寫程式,模擬比賽過程,統計在

n 局比賽中

2個球員各自贏了幾局比賽並計算獲勝的概率。。。

體育競技分析的ipo

模式:

輸入i(input)

:兩個球員的能力值,模擬比賽的次數(其中,運動員的能力值,可以通過發球方贏得本回合的概率來表示,

乙個能力值為

0.8的球員,在他發球時,有

80%的可能性贏得1分)

處理p(process)

:模擬比賽過程

輸出o(output)

:兩個球員獲勝的概率

該體育競技程式,我們採用自頂向下的設計方法。

自頂向下的設計是一種解決複雜問題的行之有效的方法。其步驟如下:

自頂向下設計的基本思想,如下圖:

python3的源**如下:

#體育競技分析程式

#頂層設計(第一階段)

from random import *

def main():

printintroduce()#列印程式的介紹資訊

#通過getinputs()來獲取

# 2個球員的能力值(每場比賽中每一回合獲勝的可能性)和比賽次數

probabilitya,probabilityb,n=getinputs()

#通過simulatengames()求得2個球員在n次比賽中獲勝的次數

winsa,winsb=simulatengames(n,probabilitya,probabilityb)

#通過printsummary()來輸出比賽的結果資訊

printsummary(winsa,winsb)

#第二階段

def printintroduce():

print('this program simulates a game between two players,a and b')

print('probability (a number between 0 and 1) is used!')

def getinputs():

a=eval(input('what is the probability of player a wins?'))

b=eval(input('what is the probability of player b wins?'))

n=eval(input('how many games to simulate?'))

return a,b,n

def simulatengames(n,probabilitya,probabilityb):

#定義球員a,b贏得比賽的次數,初始值為0

winsa=0

winsb=0

#通過for迴圈來模擬n場比賽

for i in range(n):

#simulateonegame()用來模擬一場比賽

#輸入為球員的能力值,即每場比賽中每一回合獲勝的可能性

#返回的是本場比賽2個球員的得分

#根據返回的得分來確定本場比賽的勝負

scorea,scoreb=simulateonegame(probabilitya,probabilityb)

if scorea>scoreb:

winsa+=1

else:

winsb=winsb+1

return winsa,winsb

def printsummary(winsa,winsb):

n=winsa+winsb

print('\ngames simulated:%d' % n)

print('wins for a:()'.format(winsa,winsa/n))

print('wins for b:()'.format(winsb,winsb/n))

#第三階段

def simulateonegame(probabilitya,probabilityb):

#每場比賽,2個球員的得分初始為0

scorea=0

scoreb=0

#本場比賽誰先發球(設定每場比賽總是球員a先發球)

starting='a'

while not gameover(scorea,scoreb):

if starting=='a':

#random()函式用來生成乙個隨機小數,範圍在區間 [0,1)內

if random()

執行程式2

次,第一次結果如下:

上圖說明,2

個球員的能力值相差很大時,比賽結果呈現出壓倒性趨勢,與現實中的實際比賽相符。

第二次結果如下:

生活中有這樣一種現象,2

個球員,儘管能力上只有很小的差距,但是能力稍差的球員經常被能力稍強的球員擊敗。

上**釋了這種現象,儘管能力差別小,但能力值稍小的球員,大概需要進行3

局比賽,才能贏一局,可見,他贏得一場3局或

5局的比賽可能性很小。。。

(完)

python自頂向下的設計方法進行體育競技分析

1自頂向下的設計方法 以乙個總問題開始,試圖把它表達為很多小問題組成的解決方案。再用同樣的技術依次攻破每個小問題,最終問題變得非常小,以至於可以很容易解決。然後只需把所有的碎片組合起來,就可以得到乙個程式。頂層設計 自頂向下設計中最重要的是頂層設計。以體育競技分析為例,可以從問題的ipo描述開始。大...

伸展樹 (自頂向下的設計)

伸展樹的設計有兩種設計模式,第一種 自低向上的設計方式,第二種 設計方式 自頂向下的設計方式,對於由低向上的設計,每乙個結點樹保留指向其父結點的的額外的結點,第二種方式由sedgewick 大神的 演算法 一書感謝這一 位大神。伸展樹又叫自適應查詢樹,實質上二叉搜尋樹的的變形,允許各種型別的二叉樹操...

「自頂向下 逐步求精」的設計方法

自頂向下的設計方法是一種程式開發技術,其中問題被分解為更容易處理的子問題,這些子問題的解決方案組合起來構成整體問題的解決方案。首先要理解問題,列出必須處理的資訊。這些資訊可能是問題中的資料。明確採用什麼樣的解決方案。如果是報表,明確要採用的格式。列出你對問題或資訊的假設。思考如何手動地解決這個問題,...