体育经济实例中,比赛场数我写了1000场,程序只显示模拟一场。
问题:如果现在要编写一个关于“体育竞技分析”的程序:要求用计算机模拟不同能力的运动员,体育竞技时的胜负概率,从而做出分析。这个问题如何求解呢?
D:\python\Scripts\python.exe D:\python\py.works\mz\part8\gamePE.py
这个程序模拟两个选手A和B的某种竞技比赛
这个程序需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.45
请输入选手B的能力值(0-1):0.50
请输入模拟比赛的场次:900
竞技分析开始,共模拟1场比赛
选手A获胜1场比赛,占比100.0%
选手B获胜0场比赛,占比0.0%
None
`
```python #运行代码
from random import random
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 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 gameover(a, b):
return a==15 or b ==15
def simonegame(proA,proB):
scoreA, scoreB = 0, 0
serving = 'A' #设定初始值为由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(n,proA,proB):
winsA, winsB=0, 0
for i in range(n):
scoreA, scoreB = simonegame(proA, proB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
return winsA, winsB
def main():
printintro()
probA, probB, n = getinputs()
winsA, winsB = simngames(n, probA, probB)
printsummary(winsA , winsB)
print(main())