1. 程式人生 > >python:學習自頂向下程序設計:競技體育模擬

python:學習自頂向下程序設計:競技體育模擬

運行 學習過程 函數的調用 過程 學習 import mon inpu mat

學習過程記錄:

一,需求及框架:

技術分享圖片

二:程序代碼:

 1 #sports.py
 2 from random import random
 3 
 4 def main():                            #熟悉函數的調用
 5     printInfo()
 6     probA,probB,n = getInputs()
 7     winsA,winsB = simNGames(n,probA,probB)
 8     printSummary(winsA,winsB)
 9 
10 def printInfo():
11     print
("本程序是競技體育模擬分析系統") 12 print("需要輸入選手雙方的能力值(0到1之間的小數)") 13 14 def getInputs(): 15 a = eval(input("輸入選手A的能力值(0到1的小數):")) 16 b = eval(input("輸入選手B的能力值(0到1的小數):")) 17 n = eval(input("輸入比賽場次:")) 18 return a,b,n 19 20 def gameover(scoreA,scoreB): #任意一方比分達到15球,結束本局比賽 21 return
scoreA == 15 or scoreB == 15 22 23 def simOneGame(probA,probB): #模擬單局比賽,15球一局,輸球則換發 24 scoreA,scoreB = 0,0 25 serving = "A" #這裏是賦值,不是等於(提醒自己) 26 while not gameover(scoreA,scoreB): 27 if serving == "A": 28 if random() < probA: 29 scoreA += 1 30
else: 31 serving = "B" 32 else: 33 if random() < probB: 34 scoreB += 1 35 else: 36 serving = "A" 37 return scoreA,scoreB 38 39 def simNGames(n,probA,probB): #模擬n場比賽,返回選手雙方輸贏場次 40 winsA,winsB = 0,0 41 for i in range(n): 42 a,b = simOneGame(probA,probB)#模擬每一場比賽,都要調用這個單場的 43 if a > b: #函數計算隨機結果 44 winsA += 1 45 else: 46 winsB += 1 47 return winsA,winsB 48 def printSummary(winsA,winsB): 49 summ = winsA + winsB 50 print("模擬{}場比賽".format(summ)) 51 print("選手A勝{}場,勝率為{:0.1%}".format(winsA,winsA/summ)) 52 print("選手B勝{}場,勝率為{:0.1%}".format(winsB,winsB/summ)) 53 main()

程序運行結果如下:

技術分享圖片

python:學習自頂向下程序設計:競技體育模擬