# 体育竞技分析问题
import random
def printIntro():
print('''这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要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 gameOver(scoreA, scoreB):
if (scoreA >= 15) or (scoreB >= 15):
return True
else:
return False
def Random():
return random.random()
def simOneGames(proA, proB):
scoreA, scoreB = 0, 0
serving = 'A'
while not gameOver(scoreA, scoreB):
if serving == 'A':
if Random() < proA:
scoreA += 1
else:
serving = 'B'
else:
if Random() < proB:
scoreB += 1
else:
serving = 'A'
return scoreA, scoreB
def simNGames(proA, proB, n):
winsA, winsB = 0, 0
for i in range(n):
x, y = simOneGames(proA, proB)
if x > y:
winsA += 1
elif y > x:
winsB += 1
return winsA, winsB
def printSummary(winsA, winsB):
n = winsA + winsB
print('竞技分析开始,共模拟{}场比赛'.format(n))
print('选手A获胜{}场比赛,胜率是{:.1%}'.format(winsA, winsA / n))
print('选手B获胜{}场比赛,胜率是{:.1%}'.format(winsB, winsB / n))
def main():
printIntro()
proA, proB, n = getInputs()
winsA, winsB = simNGames(proA, proB, n)
printSummary(winsA, winsB)
try:
main()
except:
print('Error')