python最后一次大作业(体育竞技)21号

第一问:采用乒乓球比赛规则(学号21)个人赛

  1. 代码
    from random import random
    
    
    # 打印程序介绍信息
    def printIntro():
        print("统计21号进行比赛分析结果:")
        print("这是团体赛模拟程序:")
    
    
    # 获得程序运行参数
    def getInputs():
        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 gameOver(a, b):
        return a == 11 or b == 11
    
    
    def gameOver2(a, b):              # 进行抢12比赛结束
        return a == 12 or b == 12
    
    
    # 进行一场比赛
    def simOneGame(probA, probB):
        scoreA, scoreB = 0, 0             # 初始化AB的得分
        serving = "A"
        while not gameOver(scoreA, scoreB):     # 用while循环来执行比赛
            if scoreA == 10 and scoreB == 10:
                return(simtwoGame2(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 simtwoGame2(probA,probB):
        scoreA, scoreB=10, 10
        serving = "A"                 # 假如先让队伍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 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 = getInputs()
        winsA, winsB = simNGames(n, probA, probB)
        printSummary(winsA, winsB)
    
    
    main()
    
  2. 结果


第一问:团体赛

  1. 代码
    from random import random
    
    
    # 打印程序介绍信息
    def printIntro():
        print("统计21号进行比赛分析结果:")
        print("这是团体赛模拟程序:")
    
    
    # 获得程序运行参数
    def getInputs():
        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 gameOver(a, b):
        return a == 11 or b == 11
    
    
    def gameOver2(a, b):              # 进行抢12比赛结束
        return a == 12 or b == 12
    
    
    # 进行一场比赛
    def simOneGame(probA, probB):
        scoreA, scoreB = 0, 0             # 初始化AB的得分
        serving = "A"
        while not gameOver(scoreA, scoreB):     # 用while循环来执行比赛
            if scoreA == 10 and scoreB == 10:
                return(simtwoGame2(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 simtwoGame2(probA,probB):
        scoreA, scoreB=10, 10
        serving = "A"                 # 假如先让队伍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 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 = getInputs()
        winsA, winsB = simNGames(n, probA, probB)
        printSummary(winsA, winsB)
    
    
    main()
    
  2. 结果

第二问:采用篮球或者足球规则模拟比赛,分析体育竞技规则,模拟比赛。

  • 代码
    # -*- coding: utf-8 -*-
    from random import random
    def printIntro():
        print("统计21号")
        print("这个程序模拟两个队伍A和B的篮球比赛")
        print("程序运行需要A和B队伍的平均能力值(以0到1之间的小数表示)")
    def getInput():
        probA=eval(input("请输入队伍A的平均能力值(0-1):"))
        probB=eval(input("请输入队伍B的平均能力值(0-1):"))
        n=eval(input("模拟比赛场次:"))
        return probA,probB,n
    def Games(n,probA,probB):            #全部比赛场次的各胜方总数分析
       A,B=0,0
       for i in range(n):
            a=fourGames(probA,probB)
            if a=="A":
                A+=1
            else:
               B+=1
       return A,B
    def fourGames(probA,probB):          #一场比赛的胜利方判断
       scoreA,scoreB=0,0
       for i in range(4):
            scoreA,scoreB=onejieGame(probA,probB)
       if scoreA>scoreB:
            return 'A'
       return 'B'
    def onejieGame(probA,probB):         #一小节比赛的比分总结
        scoreA,scoreB=0,0
        serving="A"
        while not gameOver(scoreA,scoreB):
            a=random()
            if serving=="A":
               if a<probA:
                   scoreA+=2
               else:
                   serving="B"
            else:
                if a<probB:
                    scoreB+=2
                else:
                    serving="A"
        return scoreA,scoreB
    def gameOver(a,b):
      return a==16 or b==16
    def printsummary(A,B):
        n=A+B
        print("竞技开始分析,共模拟了{}场比赛".format(n))
        print("选手A获胜{}场比赛,占比{:0.1%}".format(A,A/n))
        print("选手B获胜{}场比赛,占比{:0.1%}".format(B,B/n))
    def main():
        printIntro()
        probA,probB,n=getInput()
        A,B=Games(n,probA,probB)
        printsummary(A,B)
    main()
  • 结果

第三问:采用乒乓球、羽毛球、篮球、足球等规则中的一种。同时采用循环赛或者晋级赛形式,模拟分析4个队及以上体育竞技,并输出排名。

  • 代码
    from random import random
    def printIntro():
        print("这个程序模拟四支队伍A,B,C,D的篮球比赛,赛制采取晋级制")
        print("程序运行需要A,B,C,D队伍的平均能力值(以0到1之间的小数表示)")
    def getInput():
        probA=eval(input("请输入队伍A的平均能力值(0-1):"))
        probB=eval(input("请输入另一支队伍B的平均能力值(0-1):"))
        print("\n")
        return probA,probB
    def fourGames(x,y):          #一场比赛的胜利方判断
        scoreA,scoreB=0,0
        for i in range(4):
            scoreA,scoreB=onejieGame(x,y)
        if scoreA>scoreB:
            return 'A'
        return 'B'
    def onejieGame(x,y):         #一小节比赛的比分总结
        scoreA,scoreB=0,0
        serving="A"
        while not gameOver(scoreA,scoreB):
            a=random()
            if serving=="A":
                if a<x:
                    scoreA+=2
                else:
                    serving="B"
            else:
                if a<y:
                    scoreB+=2
                else:
                    serving="A"
        return scoreA,scoreB
    
    def gameOver(a,b):
        return a==16 or b==16
    def printmean(c):
        print("竞技开始:")
        print("经过激烈的比赛,最终队伍{}获得了比赛".format(c))
        print("恭喜{}队伍晋级!".format(c))
        print("\n")
    printIntro()
    x,y=getInput()
    c=fourGames(x,y)
    printmean(c)
    print("请再次输入其余两支队伍的平均能力值")
    x,y=getInput()
    d=fourGames(x,y)
    printmean(d)
    print("晋级双方是{}和{}".format(c,d))
    print("\n")
    print("请输入两支晋级队伍平均能力值")
    x,y=getInput()
    e=fourGames(x,y)
    print("恭喜{}获得本次比赛的总冠军!".format(e))
  • 结果
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值