比赛规则:
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
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
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
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("分析完毕")
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("分析完毕")
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("分析完毕")
def danda(): 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)
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)
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()
界面如图所示:
进行输入后,结果如图所示: