python简单体育竞技模拟_Python程序设计思维练习---体育竞技分析-阿里云开发者社区...
體育競技分析:模擬N場比賽
計算思維:抽象 + 自動化
模擬:抽象比賽過程,自動模擬N場比賽,當N越大時,比賽結果分析越科學。
本次比賽規則:回合制,15分一局,先由一方發球,如勝利,則得1分并繼續發球,如失敗,則雙方分數不改變并交換球權。球員AB的能力為0-1之間的一個數值
思維方式:自頂向下即將一個復雜問題分解成幾個問題,再細分成一個個具體的小問題,從而來解決復雜問題。自底向上為自頂向下的逆過程,即解決復雜問題的方法,逐步解決一個個小問題,來達成目的。
1.將體育競技分析分解為以下幾個小步驟
1.1打印程序的介紹性信息式
1.2獲得程序運行參數:probA(A的能力值),probB(B的能力值),n(比賽場次)
1.3利用球員AB的能力值,模擬n場比賽
1.4輸出球員AB獲勝的場次及概率
2.將各個步驟定義成函數來實現
分解
定義函數
3.完整代碼
from random import random
def printInfo(): # 打印程序介紹信息
print('這個程序模擬兩個選手A和B的某種競技比賽')
print('程序運行需要A和B的能力值(以0到1之間的小數表示)')
def getInputs(): # 獲得程序運行參數
a = eval(input('請輸入選手A的能力值(0-1):'))
b = eval(input('請輸入選手B的能力值(0-1):'))
n = eval(input('模擬比賽場次:'))
return a, b, n
def simOneGame(probA, probB): # 進行一場比賽
scoreA, scoreB = 0, 0 # 初始化AB的得分
serving = 'A' # 首先由A發球
while not gameOver(scoreA, scoreB): #用while循環來執行比賽
if serving == 'A':
if random() < probA: # random() 方法返回隨機生成的一個實數,它在[0,1)范圍內。
scoreA += 1 # 用隨機數來和能力值比較從而分出勝負
else:
serving = 'B'
else:
if random() < probB:
scoreB += 1
else:
serving = 'A'
return scoreA, scoreB
def simNGames(n, probA, probB): #進行N場比賽
winsA, winsB = 0, 0 # 初始化AB的勝場數
for i in range(n):
scoreA, scoreB = simOneGame(probA, probB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
return winsA, winsB
def gameOver(c, d): #比賽結束
return c==15 or d==15
def printSummary(n ,winA, winB): #打印比賽結果
print('競技分析開始,共模擬{}場比賽'.format(n))
print('選手A獲勝{}場比賽,占比{:.2f}%'.format(winA, winA/n*100))
print('選手B獲勝{}場比賽,占比{:.2f}%'.format(winB, winB / n * 100))
def main():
printInfo()
probA, probB, n =getInputs()
winsA, winsB = simNGames(n, probA, probB)
printSummary(n, winsA, winsB)
main()
4.運行結果分析
菜鳥互啄
中階對抗
皇城PK
分析以上數據得知:對于兩位能力相差相同的選手(都為0.05),能力越大的選手競技時,勝負概率越接近。
總結
以上是生活随笔為你收集整理的python简单体育竞技模拟_Python程序设计思维练习---体育竞技分析-阿里云开发者社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 制作高斯mask_Pyth
- 下一篇: pythonmainoffset_pyt