分析体育选手对战胜率情况
给定A,B两名选手的能力值A,B与比赛场数n,分析A,B两名选手的胜率
思路:
1、输入A,B两名选手能力值与场数n
2、模拟一场比赛中A,B获胜情况
3、重复模拟n次,得出A,B胜场
4、计算A,B获胜概率
模拟规则:
A,B能力值为0~1的实数
一场比赛中,在A的回合中,A的能力值大于随机数,则A获得一分。若A的能力值小于随机数,则A不扣分,B不加分,换为B的回合。当其一得分超过15分,则比赛结束。当随机数大于0.5则第一回合A发球,反之B发球(随机数均为0~1的实数)
import random as rd
def Get_inf(): #输入A,B能力值与比赛场数
A,B,n=map(float,input().split(","))
return (A,B,n)
def Print_analyse(winA,winB): #计算得出A,B胜率
n=winA+winB
print("选手A的胜率为:",(winA)/n)
print("选手B的胜率为:",(winB)/n)
def One_game(A,B): #模拟一场比赛A,B的胜负情况
ScoreA,ScoreB=0,0
if (rd.random()>0.5): #第一回合发球权
Round=1
else:
Round=0
while(ScoreA<15)and(ScoreB<15):
if (Round==1): #A的回合
if (rd.random()>A):
Round=0
else:
ScoreA+=1
else: #B的回合
if (rd.random()>B):
Round=1
else:
ScoreB+=1
return (1 if(ScoreA>ScoreB) else 0) #返回胜负情况
def Simulation(A,B,n): #重复模拟n次比赛
winA,winB=0,0
for i in range(n):
result=One_game(A,B)
if (result==1): #A获胜
winA+=1
else: #B获胜
winB+=1
return (winA,winB)
def main():
A,B,n=Get_inf()
winA,winB=Simulation(A,B,int(n))
Print_analyse(winA,winB)
main()