• 乒乓球比赛模拟分析


    比赛规则:

    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()
     
     界面如图所示:

     进行输入后,结果如图所示:

  • 相关阅读:
    第07组 Beta冲刺(1/5)
    软工实践个人总结
    SDN大作业
    第08组 Beta版本演示
    2019 SDN上机第7次作业
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
    第08组 Beta冲刺(3/5)
    第08组 Beta冲刺(2/5)
    2019 SDN上机第6次作业
  • 原文地址:https://www.cnblogs.com/hch123/p/hch--pingpangqiubisaimoni.html
Copyright © 2020-2023  润新知