體育競技
阿新 • • 發佈:2020-11-22
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()