乒乓球比赛模拟分析
比赛规则:
1.在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方
2.在一场比赛中,单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制
3.注意:团体赛由四局单打,一局双打组成,顺序:一,二,四,五为单打,第三局为双打
代码实现如下:
from random import random
def bsxx():
string1="模拟体育竞技分析 模拟人:huangcanhua"
string2="模拟乒乓球竞技分析"
string3="乒乓球比赛规则如下:"
string4="一局比赛:"
string5="先得11分的一方为胜方;10平后,先多得2分的一方为胜方。"
string6="一场比赛:"
string7="单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。"
string8="注意:团体赛由四局单打,一局双打组成"
string9="顺序:一,二,四,五为单打,第三局为双打"
print(string1)
print()
print(string2)
print(string3)
print(string4)
print(string5)
print(string6)
print(string7)
print(string8)
print(string9)
print()
def getinputs1():
print()
print("您选择的比赛类型是:单打淘汰赛")
print("为了更好的模拟比赛数据,请输入两位运动员的能力值(0-1之间)")
athlete1=eval(input("请输入第一位运动员能力值:"))
athlete2=eval(input("请输入第二位运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
return athlete1,athlete2,n
def getinputs2():
print()
print("您选择的比赛类型是:双打淘汰赛")
print("为了更好的模拟比赛数据,请输入四位运动员的能力值(0-1之间)")
print("请输入团队A的运动员能力值")
athlete1=eval(input("请输入第一位运动员能力值:"))
athlete2=eval(input("请输入第二位运动员能力值:"))
print("请输入团队B的运动员能力值")
athlete3=eval(input("请输入第三位运动员能力值:"))
athlete4=eval(input("请输入第四位运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
aver1=(athlete1+athlete2)/2
aver2=(athlete3+athlete4)/2
return aver1,aver2,n
def getinputs3():
print()
print("您选择的比赛类型是:团体赛")
print("为了更好的模拟比赛数据,请输入五局运动员的能力值(0-1之间)")
print("请按照出场顺序,分别输出运动员的能力值")
print("请输入团队A的运动员能力值")
athlete1=eval(input("请输入第一局运动员能力值:"))
athlete2=eval(input("请输入第二局运动员能力值:"))
athlete3=eval(input("请输入第三局运动员能力值:"))
athlete4=eval(input("请输入第四局运动员能力值:"))
athlete5=eval(input("请输入第五局运动员能力值:"))
print("请输入团队B的运动员能力值")
athlete6=eval(input("请输入第一局运动员能力值:"))
athlete7=eval(input("请输入第二局运动员能力值:"))
athlete8=eval(input("请输入第三局运动员能力值:"))
athlete9=eval(input("请输入第四局运动员能力值:"))
athlete10=eval(input("请输入第五局运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
return athlete1,athlete2,athlete3,athlete4,athlete5,athlete6,athlete7,athlete8,athlete9,athlete10,n
def oneGame(N,ablity1,ablity2):
score1,score2=0,0
i=0
while not gameover(score1,score2):
if i==0:
for k in range(2):
if random()>ablity1:
score2+=1
else:
score1+=1
i+=1
if i==1:
for k in range(2):
if random()>ablity2:
score1+=1
else:
score2+=1
i-=1
return score1,score2
def allGame(ablity1,ablity2):
N=1
win1,win2=0,0
for i in range(7):
score1,score2=oneGame(N,ablity1,ablity2)
if score1>score2:
win1+=1
else:
win2+=1
N+=1
if win1==4 or win2==4:
break
return win1,win2
string1="模拟体育竞技分析 模拟人:huangcanhua"
string2="模拟乒乓球竞技分析"
string3="乒乓球比赛规则如下:"
string4="一局比赛:"
string5="先得11分的一方为胜方;10平后,先多得2分的一方为胜方。"
string6="一场比赛:"
string7="单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。"
string8="注意:团体赛由四局单打,一局双打组成"
string9="顺序:一,二,四,五为单打,第三局为双打"
print(string1)
print()
print(string2)
print(string3)
print(string4)
print(string5)
print(string6)
print(string7)
print(string8)
print(string9)
print()
def getinputs1():
print()
print("您选择的比赛类型是:单打淘汰赛")
print("为了更好的模拟比赛数据,请输入两位运动员的能力值(0-1之间)")
athlete1=eval(input("请输入第一位运动员能力值:"))
athlete2=eval(input("请输入第二位运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
return athlete1,athlete2,n
def getinputs2():
print()
print("您选择的比赛类型是:双打淘汰赛")
print("为了更好的模拟比赛数据,请输入四位运动员的能力值(0-1之间)")
print("请输入团队A的运动员能力值")
athlete1=eval(input("请输入第一位运动员能力值:"))
athlete2=eval(input("请输入第二位运动员能力值:"))
print("请输入团队B的运动员能力值")
athlete3=eval(input("请输入第三位运动员能力值:"))
athlete4=eval(input("请输入第四位运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
aver1=(athlete1+athlete2)/2
aver2=(athlete3+athlete4)/2
return aver1,aver2,n
def getinputs3():
print()
print("您选择的比赛类型是:团体赛")
print("为了更好的模拟比赛数据,请输入五局运动员的能力值(0-1之间)")
print("请按照出场顺序,分别输出运动员的能力值")
print("请输入团队A的运动员能力值")
athlete1=eval(input("请输入第一局运动员能力值:"))
athlete2=eval(input("请输入第二局运动员能力值:"))
athlete3=eval(input("请输入第三局运动员能力值:"))
athlete4=eval(input("请输入第四局运动员能力值:"))
athlete5=eval(input("请输入第五局运动员能力值:"))
print("请输入团队B的运动员能力值")
athlete6=eval(input("请输入第一局运动员能力值:"))
athlete7=eval(input("请输入第二局运动员能力值:"))
athlete8=eval(input("请输入第三局运动员能力值:"))
athlete9=eval(input("请输入第四局运动员能力值:"))
athlete10=eval(input("请输入第五局运动员能力值:"))
n=eval(input("请输入模拟的场次:"))
return athlete1,athlete2,athlete3,athlete4,athlete5,athlete6,athlete7,athlete8,athlete9,athlete10,n
def oneGame(N,ablity1,ablity2):
score1,score2=0,0
i=0
while not gameover(score1,score2):
if i==0:
for k in range(2):
if random()>ablity1:
score2+=1
else:
score1+=1
i+=1
if i==1:
for k in range(2):
if random()>ablity2:
score1+=1
else:
score2+=1
i-=1
return score1,score2
def allGame(ablity1,ablity2):
N=1
win1,win2=0,0
for i in range(7):
score1,score2=oneGame(N,ablity1,ablity2)
if score1>score2:
win1+=1
else:
win2+=1
N+=1
if win1==4 or win2==4:
break
return win1,win2
def Allgame(n,ablity1,ablity2):
wins1,wins2=0,0
for i in range(n):
score1,score2=allGame(ablity1,ablity2)
if score1>score2:
wins1+=1
else:
wins2+=1
return wins1,wins2
wins1,wins2=0,0
for i in range(n):
score1,score2=allGame(ablity1,ablity2)
if score1>score2:
wins1+=1
else:
wins2+=1
return wins1,wins2
def TTgame(n,A1,A2,A3,A4,A5,B1,B2,B3,B4,B5):
teamA,teamB=0,0
A,B=0,0
for i in range(n):
a1,b1=Allgame(1000,A1,B1)
if a1>b1:
A+=1
else:
B+=1
a2,b2=Allgame(1000,A2,B2)
if a2>b2:
A+=1
else:
B+=1
a3,b3=Allgame(1000,A3,B3)
if a3>b3:
A+=1
else:
B+=1
if A>=3:
teamA+=1
A,B=0,0
elif B>=3:
teamB+=1
A,B=0,0
else:
a4,b4=Allgame(1000,A4,B4)
if a4>b4:
A+=1
else:
B+=1
if A>=3:
teamA+=1
A,B=0,0
elif B>=3:
teamB+=1
A,B=0,0
else:
a5,b5=Allgame(1000,A5,B5)
if a5>b5:
A+=1
else:
B+=1
if A>=3:
teamA+=1
A,B=0,0
elif B>=3:
teamB+=1
A,B=0,0
return teamA,teamB
def gameover(a,b):
if a>=11 and (a-b)>=2:
return a
if b>=11 and (b-a)>=2:
return b
if a>=11 and (a-b)>=2:
return a
if b>=11 and (b-a)>=2:
return b
def alysis(n,win1,win2):
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("athlete1单打获得{}场胜利,共占比{:.2f}%".format(win1,win1/n*100))
print("athlete2单打获得{}场胜利,共占比{:.2f}%".format(win2,win2/n*100))
print("分析完毕")
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("athlete1单打获得{}场胜利,共占比{:.2f}%".format(win1,win1/n*100))
print("athlete2单打获得{}场胜利,共占比{:.2f}%".format(win2,win2/n*100))
print("分析完毕")
def alysis2(n,win1,win2):
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("团队A双打获得{}场胜利,共占比{:.2f}%".format(win1,win1/n*100))
print("团队B双打获得{}场胜利,共占比{:.2f}%".format(win2,win2/n*100))
print("分析完毕")
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("团队A双打获得{}场胜利,共占比{:.2f}%".format(win1,win1/n*100))
print("团队B双打获得{}场胜利,共占比{:.2f}%".format(win2,win2/n*100))
print("分析完毕")
def alysis1(n,teamA,teamB):
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("团队A获得{}场胜利,共占比{:.2f}%".format(teamA,teamA/n*100))
print("团队B获得{}场胜利,共占比{:.2f}%".format(teamB,teamB/n*100))
print("分析完毕")
print("模拟竞赛分析开始,共模拟{}场比赛".format(n))
print("团队A获得{}场胜利,共占比{:.2f}%".format(teamA,teamA/n*100))
print("团队B获得{}场胜利,共占比{:.2f}%".format(teamB,teamB/n*100))
print("分析完毕")
def danda():
ablity1,ablity2,n=getinputs1()
win1,win2=Allgame(n,ablity1,ablity2)
print("模拟单打:")
alysis(n,win1,win2)
ablity1,ablity2,n=getinputs1()
win1,win2=Allgame(n,ablity1,ablity2)
print("模拟单打:")
alysis(n,win1,win2)
def shuangda():
averablity1,averablity2,n=getinputs2()
win1,win2=Allgame(n,averablity1,averablity2)
print("模拟双打:")
alysis2(n,win1,win2)
averablity1,averablity2,n=getinputs2()
win1,win2=Allgame(n,averablity1,averablity2)
print("模拟双打:")
alysis2(n,win1,win2)
def tuanti():
A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,n=getinputs3()
teamA,teamB=TTgame(n,A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)
alysis1(n,teamA,teamB)
A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,n=getinputs3()
teamA,teamB=TTgame(n,A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)
alysis1(n,teamA,teamB)
def mian():
bsxx()
x=1
while x==1:
print("请选择模拟比赛类型")
print("一、单打淘汰赛")
print("二、双打淘汰赛")
print("三、团体赛")
print("四,结束模拟分析")
choice1=eval(input("请输入对应比赛类型的阿拉伯数字编号:"))
if choice1==1:
danda()
print()
elif choice1==2:
shuangda()
print()
elif choice1==3:
tuanti()
print()
elif choice1==4:
print("模拟程序结束")
break
else:
print("输入错误,请重新输入")
print()
mian()
bsxx()
x=1
while x==1:
print("请选择模拟比赛类型")
print("一、单打淘汰赛")
print("二、双打淘汰赛")
print("三、团体赛")
print("四,结束模拟分析")
choice1=eval(input("请输入对应比赛类型的阿拉伯数字编号:"))
if choice1==1:
danda()
print()
elif choice1==2:
shuangda()
print()
elif choice1==3:
tuanti()
print()
elif choice1==4:
print("模拟程序结束")
break
else:
print("输入错误,请重新输入")
print()
mian()
界面如图所示:
进行输入后,结果如图所示: