體育競技分析
要求:
- 雙人擊球A&B,回合制,5局3勝
- 開始時一方先發球,直至判分,接下來勝者發球
- 球員只能在發球局得分(如果發球方輸了,不扣分,換對方發球),15分勝一局
分析:
自頂向下設計
自底向上執行
過程:
- 列印程序的介紹性信息
- 獲得程序的運行參數:proA,proB,n
- 獲得球員A和B的能力值,模擬n場比賽
- 輸出球員A和B的獲勝場次和概率
編程:
#game.pyfrom random import random #提示程序的目的def printintro(): print("這個程序模擬兩個選手A和B的某種比賽") print("程序運行需要A和B的能力值,用0-1之間的小數表示")#輸入A,B的能力值和比賽場次n def getinputs(): a= eval(input("請輸入選手A的能力值:")) b= eval(input("請輸入選手也B的能力值:")) n= eval(input("模擬比賽的場次:")) return a,b,n#輸出A,B獲勝次數和所佔比例 def printsummary(winsA,winsB): n=winsA+winsB print("競技分析開始,共模擬{}場比賽".format(n)) print("選手A獲勝{}場比賽,佔比{:0.1%}".format(winsA,winsA/n)) print("選手B獲勝{}場比賽,佔比{:0.1%}".format(winsB,winsB/n))#模擬一場比賽def simonegame(probA,probB): scoreA,scoreB=0,0#A,B得分 serving="A"#A第一次開始 while not gameover(scoreA,scoreB):#得分都不為15 if serving=="A": if random()<probA:#如果隨機小數小於A的能力值 scoreA+=1#此時A的得分+1 else:#如果隨機小數大於A的能力值 serving="B" else:#此時serving="B" if random()<probB:#如果隨機小數小於B的能力值 scoreB+=1#此時B的得分+1 else: serving="A" return scoreA,scoreB#判斷a,b是否至少一個為15,返回True or Falsedef gameover(a,b): return a==15 or b==15#返回A,B獲勝的次數def simngames(n,probA,probB): winsA,winsB=0,0 for i in range(n): scoreA,scoreB = simonegame(probA,probB) if scoreA>scoreB: winsA+=1 else: winsB+=1 return winsA,winsB#主函數def main(): printintro() probA,probB,n=getinputs() winsA,winsB=simngames(n,probA,probB) printsummary(winsA,winsB)#調用函數main()
推薦閱讀:
※自學python之後如果不去公司上班,自己一個人可以通過此技能掙什麼錢?
※怎麼解決Python3亂碼問題?
※雲伺服器上如何運行python程序?
※python 中的dead()的作用是什麼?
※Python函數中*和**的內涵究竟是什麼呢?