模拟N场比赛理解自顶向下的程序设计思维
體育競(jìng)技分析:模擬N場(chǎng)比賽
計(jì)算思維:抽象+自動(dòng)化
模擬:抽象比賽過程+自動(dòng)化執(zhí)行N場(chǎng)比賽
當(dāng)N越大時(shí),比賽結(jié)果分析會(huì)越科學(xué)
比賽規(guī)則
雙人擊球比賽:A&B,回合制,5局3勝
開始時(shí)一方先發(fā)球,直至判分,接下來勝者發(fā)球
球員只能在發(fā)球局得分,15分勝一局
自頂向下(設(shè)計(jì))
將一個(gè)總的問題表達(dá)為若個(gè)小問題組成的形式
使用同樣方法進(jìn)一步分解小問題
直至,小問題可以用計(jì)算機(jī)簡(jiǎn)單明了的解決
主函數(shù)
第一階段:打印比賽提示信息
def printInfo():print("這個(gè)程序模擬兩個(gè)選手A和B的某種競(jìng)技比賽")print("程序運(yùn)行需要A和B的能力值(以0到1之間的小數(shù)表示)")第二階段 :獲得用戶輸入
def getInpputs():a = eval(input("請(qǐng)輸入選手A的能力值(0-1): "))b = eval(input("請(qǐng)輸入選手B的能力值(0-1): "))n = eval(input("模擬比賽場(chǎng)次: "))return a,b,n第四階段:打印輸出結(jié)果
def printSummary(winsA,winsB):n = winsA+winsBprint("競(jìng)技分析開始,共模擬{}場(chǎng)比賽".format(n))print("選手A獲勝{}場(chǎng)比賽,占比{:0.1%}".format(winsA,winsA/n))print("選手B獲勝{}場(chǎng)比賽,占比{:0.1%}".format(winsB,winsB/n))模擬N局比賽可以作為一個(gè)總問題來分解,分解為模擬一局比賽并且將它循環(huán)N次
def simNGames(n,probA,probB):winsA,winsB = 0,0for i in range (n):scoreA,scoreB = simOneGame(probA,probB)if scoreA > scoreB:winsA += 1else:winsB += 1return winsA,winsB在模擬一局比賽中,一方達(dá)到15分視為這一局結(jié)束,所以我們可以把模擬一局比賽當(dāng)作一個(gè)大問題從中分解出一個(gè)小模塊為判斷比賽結(jié)束
def gameOver(a,b):return a==15 or b==15 def simOneGmae(probA,probB):scoreA,scoreB = 0,0serving = "A"while not gameOver(scoreA,scoreB):if serving == "A":if random() < probA:scoreA += 1else:serving = "B"else:if random() < probB:scoreB += 1else:serving = "A"return scoreA,scoreB自底向上(執(zhí)行)
逐步組建復(fù)雜系統(tǒng)的有效測(cè)試方法
分單元測(cè)試,逐步組裝
按照自頂向下相反的路徑操作
直至,系統(tǒng)各部分以組裝的思路都經(jīng)過測(cè)試和驗(yàn)證
總結(jié)
以上是生活随笔為你收集整理的模拟N场比赛理解自顶向下的程序设计思维的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11岁男生买了一个玩具手枪,不会拼装,自
- 下一篇: 变形坦克2高速高爆弹强度评测变形坦克2高