模拟体育竞技分析:采⽤乒乓球⽐赛规则即:
⼀局⽐赛:在⼀局⽐赛中,先得11分的⼀⽅为胜⽅;10平后,先多得2分的⼀⽅为胜⽅。
⼀场⽐赛:单打的淘汰赛采⽤七局四胜制,双打淘汰赛和团体赛采⽤五局三胜制。
from random import random
#打印程序介绍信息
def printIntro():
print("这个程序模拟两个选⼿A和B的乒乓球⽐赛")
print("程序运⾏需要A和B的能⼒值(以0到1之间的⼩数表⽰)")
#获得程序运⾏参数
def printInputs():
a =eval(input("请输⼊选⼿A的能⼒值(0-1): "))
b =eval(input("请输⼊选⼿B的能⼒值(0-1): "))
n =eval(input("模拟⽐赛的场次: "))
return a, b, n
# 进⾏N场⽐赛
def simNGames(n, probA, probB):
winsA, winsB =0, 0
for i in range(n):
for j in range(7):          #进⾏7局4胜的⽐赛
scoreA, scoreB =simOneGame(probA, probB)
if scoreA > scoreB:
winsA +=1
else:
winsB +=1
return winsA,winsB
#进⾏⼀场⽐赛
def simOneGame(probA, probB):
scoreA, scoreB =0, 0#初始化AB的得分
serving ="A"
while not gameOver(scoreA, scoreB):    #⽤while循环来执⾏⽐赛
if scoreA==10and scoreB==10:
return(simOneGame2(probA,probB))
if serving =="A":
if random() < probA:            ##⽤随机数⽣成胜负
scoreA +=1
else:
serving="B"
else:
if random() < probB:
scoreB +=1
else:
serving="A"
return scoreA, scoreB
def simOneGame2(probA,probB):
scoreA,scoreB=10,10
serving ="A"
while not gameOver2(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):              #正常⽐赛结束
return a==11or b==11
def gameOver2(a,b):              #进⾏抢12⽐赛结束
if abs((a-b))>=2:
return a,b
#输出数据
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 =printInputs()
winsA, winsB =simNGames(n, probA, probB)
printSummary(winsA, winsB)
main()