1自頂向下的設計方法:
以乙個總問題開始,試圖把它表達為很多小問題組成的解決方案。再用同樣的技術依次攻破每個小問題,最終問題變得非常小,以至於可以很容易解決。然後只需把所有的碎片組合起來,就可以得到乙個程式。
頂層設計:自頂向下設計中最重要的是頂層設計。 以體育競技分析為例,可以從問題的ipo描述開始。大多數程式都可以簡單將ipo 描述直接用到程式結構設計中,體育競技分析從使用者得到模擬引數模擬比賽,最後輸出結果。
步驟1 輸出一些介紹資訊,針對提公升使用者體驗十分有益。
頂層設計一般不寫出具體**,僅給出函式定義,其中,printintro()函式列印一些必要的說明
步驟2 獲得使用者輸入。
通過函式將輸入語句及輸入格式等細節封裝或隱藏,只需要假設程式如果呼叫了getinputs()函式即可獲取變數 proba, probb 和 n 的值。這個函式必須為主程式返回這些值,截止第2步
步驟3 需要使用proba、probb 模擬n場比賽。 此時,可以採用解決步驟2的類似方法,設計乙個simngames()函式來模擬n場比賽,並返回結果。按照體育競技問題的要求,該函式需要模擬比賽,並獲得球員a 和球員b 贏得比賽的結果。
步驟4 輸出結果,設計思想類似,仍然只規劃功能和函式
因此,原問題被劃分為了4 個獨立的函式:printintro(),getinputs(),simngames()和printsummary()。分解過程讓程式設計師在這一步不必關心具體細節而專心考慮程式的結構設計。
第 n 層設計
def simngames(n,proba,porbb):simngames()函式是整個函式的核心,其基本思路是模擬n場比賽,並跟蹤記錄每個球員贏得了多少比賽。winsa,winsb=0,0
for i in range(n):
scorea,scoreb=simonegame(porba,porbb)
if scorea>scoreb:
winsa+=1
else:
winsb+=1
reture winsa,winsb
下面·是·羽毛球·例項·
比賽規則·
def simonegame(proba,porbb):執行截圖:scorea,score=0,0
serving="a"
while not gameover(scorea,scoreb):
if serving =="a":
if random()整個程式如下
from random import random
def printinfo():
print("這個程式模擬兩個選手a和b的羽毛球競技比賽")
print("程式需要兩個選手的能力值0-1")
def getinput():
a = eval(input("請輸入選手a的能力值(0-1):"))
b = eval(input("請輸入選手b的能力值(0-1):"))
m=eval(input("比賽的局數:"))
n = eval(input("模擬比賽的場次:"))
return a,b,m,n
def printsummary(winsa,winsb):
n = winsa + winsb
print("競技分析開始,共模擬{}場比賽".format(n))
print("選手a獲勝{}場比賽,佔比".format(winsa,winsa/n))
print("選手b獲勝{}場比賽,佔比".format(winsb,winsb/n))
def simngames(m,n,proba,probb):
winsa,winsb = 0,0
wa,wb=0,0
for i in range(n):
for i in range(m):
scorea,scoreb = simonegame(proba,probb)
if scorea > scoreb:
wa += 1
else:
wb += 1
if wa==2:
winsa+=1
wa,wb=0,0
break
if wb==2:
winsb+=1
wa,wb=0,0
break
return winsa,winsb
def simonegame(proba,probb):
scorea,scoreb = 0,0
serving = "a"
while not gameover(scorea,scoreb):
if serving == "a":
if random() < proba:
scorea += 1
else:
serving = "b"
else:
if random() < probb:
scoreb += 1
else:
serving = "a"
return scorea,scoreb
def gameover(a,b):
if(a>=20 or b>=20):
if(abs(a-b)==2 and a<=29 and b<=29):
return true
else:
return a==30 or b==30
else:
return false
def main():
printinfo()
proba,probb,m,n = getinput()
winsa,winsb = simngames(m,n,proba,probb)
printsummary(winsa,winsb)
main()
python自頂向下的設計方法進行體育競技分析
本文嘗試採用自頂向下的設計方法進行體育競技分析。基本規則 兩個球員,交替用球拍擊球。一方首先具有發球權,雙方連續擊打,球落地則該回合結束。如果輸掉這一回合的是發球方,雙方均不加分,但發球權要交給另一方。如果發球方贏得了這一回合,則發球方贏得1 分,並繼續擁有發球權。首先到達15 分的一方贏得本局比賽...
伸展樹 (自頂向下的設計)
伸展樹的設計有兩種設計模式,第一種 自低向上的設計方式,第二種 設計方式 自頂向下的設計方式,對於由低向上的設計,每乙個結點樹保留指向其父結點的的額外的結點,第二種方式由sedgewick 大神的 演算法 一書感謝這一 位大神。伸展樹又叫自適應查詢樹,實質上二叉搜尋樹的的變形,允許各種型別的二叉樹操...
「自頂向下 逐步求精」的設計方法
自頂向下的設計方法是一種程式開發技術,其中問題被分解為更容易處理的子問題,這些子問題的解決方案組合起來構成整體問題的解決方案。首先要理解問題,列出必須處理的資訊。這些資訊可能是問題中的資料。明確採用什麼樣的解決方案。如果是報表,明確要採用的格式。列出你對問題或資訊的假設。思考如何手動地解決這個問題,...