题目来源mooc.
代码运行结果如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName :体育竞技问题实例分析.py
# @Time :2022/8/22 9:48
# @Author :YKW
from random import*
def printIntro():
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 simNGames(n,probA,probB):
winsA,winsB = 0 , 0
for i in range(n):
scoresA, scoresB = simOneGame(probA,probB)
if scoresA > scoresB:
winsA += 1
else:
winsB += 1
return winsA, winsB
def simOneGame(probA,probB):
scoresA, scoresB=0,0
serving = 'A'
while not gameOver(scoresA,scoresB):
if serving == 'A':
if random() < probA:
scoresA += 1
else:
serving = 'B'
else:
if random() < probB:
scoresB += 1
else:
serving = 'A'
return scoresA, scoresB
def gameOver(a,b):
return a==15 or b==15
def printSummary(winsA, winsB):
n = winsA+winsB
print('分析开始,共模拟{}场比赛'.format(n))
print('选手A获胜{}场比赛,占比{:0.1%}'.format(winsA,winsA/n))
print('选手B获胜{}场比赛,占比{:0.1%}'.format(winsB, winsB / n))
def main():
printIntro()
probA, probB, n = getInputs()
winsA, winsB = simNGames(n,probA,probB)
printSummary(winsA, winsB)
main()