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獲勝{}場比賽,佔比%'.format(wina, wina/n*100))
print('選手b獲勝{}場比賽,佔比%'.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),能力越大的選手競技時,勝負概率越接近。本練習來自中國大學mooc
python思維練習 體育競技分
高手過招,勝負只在毫釐之間 用科學的方法分析體育競技比賽 輸入 球員水平 輸出 可 的比賽成績 比賽規則 這個程式模擬兩個選手a和b的某種競技比賽 print 程式執行需要a和b的能力值 以0 1之間的小數表示 def getinputs a eval input 請輸入選手a的能力值 b eval...
python自頂向下的設計方法進行體育競技分析
本文嘗試採用自頂向下的設計方法進行體育競技分析。基本規則 兩個球員,交替用球拍擊球。一方首先具有發球權,雙方連續擊打,球落地則該回合結束。如果輸掉這一回合的是發球方,雙方均不加分,但發球權要交給另一方。如果發球方贏得了這一回合,則發球方贏得1 分,並繼續擁有發球權。首先到達15 分的一方贏得本局比賽...
python自頂向下的設計方法進行體育競技分析
1自頂向下的設計方法 以乙個總問題開始,試圖把它表達為很多小問題組成的解決方案。再用同樣的技術依次攻破每個小問題,最終問題變得非常小,以至於可以很容易解決。然後只需把所有的碎片組合起來,就可以得到乙個程式。頂層設計 自頂向下設計中最重要的是頂層設計。以體育競技分析為例,可以從問題的ipo描述開始。大...