其他分享
首页 > 其他分享> > 羽毛球比赛模拟

羽毛球比赛模拟

作者:互联网

#体育竞技
from random import random
def printInfo():
print("这个程序模拟两个选手A和B的羽毛球竞技比赛")
print("程序需要两个选手的能力值0-1")
print("规则:三局两胜--21分制")

def getInput():
a = eval(input("请输入选手A的能力值(0-1):"))

b = eval(input("请输入选手B的能力值(0-1):"))

m=eval(input("比赛的局数:"))

n = eval(input("模拟比赛的场次:"))
return a,b,m,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 simNGames(m,n,probA,probB):

winsA,winsB = 0,0
wa,wb=0,0

for i in range(n):
for i in range(m):

scoreA,scoreB = simOneGame(probA,probB)

if scoreA > scoreB:
wa += 1
else:
wb += 1

if wa==2:
winsA+=1
wa,wb=0,0
break
if wb==2:
winsB+=1
wa,wb=0,0
break


return winsA,winsB


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 gameOver(a,b):
if(a>=20 or b>=20):
if(abs(a-b)==2 and a<=29 and b<=29):
return True
else:
return a==30 or b==30
else:
return False

def main():
printInfo()
probA,probB,m,n = getInput()
winsA,winsB = simNGames(m,n,probA,probB)
printSummary(winsA,winsB)

main()

 

标签:winsB,winsA,return,比赛,probB,probA,羽毛球,模拟,scoreA
来源: https://www.cnblogs.com/a2cd/p/15550680.html