两个球员在一个有 4面边界的场地上用球拍击球。开始比赛时,其中一个球员首先发球。 接下来球员交替击球,直到可以判定得分为止,这个过程称为回合。当一名球员未能进行一次合法击打时,回合结束。未能打中球的球员输掉这个回合。如果输掉这个回合的是发球方,那么发球权交给另方;如果输掉的是接球方,则仍然由这个回合的发球方继续发球。总之,每回合结束,由赢得该回合的一方发球。球员只能在他们自己的发球局中得分。首先达到15分的球员赢得一局比赛。
from random import random
def printIntro():
print("这个程序模拟A,B两个选手的比赛:\n")
print("这个程序的实现需要知道A,B两个选手的能力值,该值为0-1之间的小数:\n")
def getInputs():
probA = eval(input("请输入A的能力值:"))
probB = eval(input("请输入B的能力值:"))
n=int(input("请输入比赛场次:"))
return probA,probB,n
def printSummary(winsA,winsB):
print("预计A会赢得{}场比赛".format(winsA))
print("预计B会赢得{}场比赛".format(winsB))
def simNGames(probA,probB,n):
winsA,winsB=0,0
for i in range(n):
scoreA,scoreB=simOneGame(probA,probB)
if(scoreA>scoreB):
winsA+=1
else:
winsB+=1
return winsA,winsB
def simOneGame(probA,probB):
scoreA,scoreB=0,0
serve='A'
while not onegameOver(scoreA,scoreB):
if (serve=='A'):
if(random()<=probA):
scoreA += 1
else:
serve='B'
if (serve=='B'):
if(random()<=probB):
scoreB += 1
else:
serve='A'
return scoreA,scoreB
def onegameOver(a,b):
return a==15 or b==15
probA,probB,n=getInputs()
winsA,winsB=simNGames(probA,probB,n)
printSummary(winsA,winsB)
版权声明:本文为qq_51666744原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。