33 模擬體育分析
print("乒乓球比賽,學號2020310143033")
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
serving = 'A'
while not gameOver(scoreA, scoreB):
if serving == 'A':
if random() < probA:
scoreA += 1
else:
serving = 'B'
else:
if random() < probB:
scoreB += 1
else:
serving = 'A'
return scoreA, scoreB
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 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()