zoukankan      html  css  js  c++  java
  • 预测球队比赛成绩

    排球比赛预测 

    赛程规定:

    每场比赛采用 5局3胜制。前四局采用25分制,每个队只有在赢得至少25分,且同时超过对方2分时才胜一局。决胜局(第五局)采用15分制,先获得15分,且同时超过对方2分为胜。

    代码介绍:

    函数名称 函数说明
    printInfo() 打印程序的介绍信息
    getInputs() 获得用户输入的参数
    printResult(n, winsA, winsB) 输出模拟比赛的结果
    simNGames(n, probA, probB) 模拟n场比赛
    simOneGame(probA, probB) 模拟一场比赛,包括五局,采取五局三胜制
    simAGame(N, probA, probB) 模拟一局比赛
    GameOver(N, scoreA, scoreB) 定义一局比赛的结束条件
    from random import random
    from time import time
    def printInfo():
        '''
        function: 打印程序的介绍信息
        '''
        print("{:*^70}".format("产品简介"))
        print("产品名称: 排球竞技模拟分析器")
        print("产品概述: 通过输入2个队伍A和B的能力值(0到1之间的小数表示),能够模拟多次2个队伍A和B的排球竞技比赛,从而得出各自的胜率!")
        print("产品作者: 张仲凯 - 04")
        print("{:*^70}".format("模拟开始"))
    
    def getInputs():
        '''
        function: 获得用户输入的参数
        '''
        probA = eval(input("请输入队伍A的能力值(0~1):"))
        probB = eval(input("请输入队伍B的能力值(0~1):"))
        n = eval(input("请输入需要模拟比赛的场次数:"))
        return probA, probB, n
    
    def printResult(n, winsA, winsB):
        '''
        function: 输出模拟比赛的结果
        '''
        print("{:*^70}".format("模拟结束"))
        print("竞技分析开始,共模拟{}场比赛。".format(n))
        print(">>>队伍A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
        print(">>>队伍B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
    
    def simNGames(n, probA, probB):
        '''
        function: 模拟n场比赛
        n: 模拟n场比赛
        probA, probB: 分别为队伍A和B的能力值
        winA, winB: 队伍A和B在一场比赛中获胜的局数
        winsA, winsB: 队伍A和B赢得比赛的场数,总共n场
        '''
        winsA, winsB = 0, 0
        for _ in range(n):
            winA, winB = simOneGame(probA, probB)
            if winA > winB:
                winsA += 1
            else:
                winsB += 1
        return winsA, winsB
    
    def simOneGame(probA, probB):
        '''
        function: 模拟一场比赛,包括五局,采取五局三胜制
        probA, probB: 分别为队伍A和B的能力值
        return: 返回队伍A和B在本场比赛中获胜的局数
        scoreA, scoreB: 分别为队伍A和B一局比赛获得的分数
        winA, winB: 分别为队伍A和B一场比赛获胜的局数
        N: 代表本次比赛的局次
        '''
        winA, winB = 0, 0
        for N in range(5):
            scoreA, scoreB = simAGame(N, probA, probB)
            if scoreA > scoreB:
                winA += 1
            else:
                winB += 1
            if winA == 3 or winB == 3:
                break
        return winA, winB
    
    def simAGame(N, probA, probB):
        '''
        function: 模拟一局比赛
        N: 代表本次比赛的局次
        probA, probB: 分别为队伍A和B的能力值
        return: 返回队伍A和B在本局比赛中获得的分数
        '''
        scoreA, scoreB = 0, 0    # 分别为队伍A和B一局比赛获得的分数
        serving = 'A'            # 发球方
        while not GameOver(N, scoreA, scoreB):
            if serving == 'A':
                if random() > probA:
                    scoreB += 1
                    serving = 'B'
                else:
                    scoreA += 1
            else:
                if random() > probB:
                    scoreA += 1
                    serving = 'A'
                else:
                    scoreB += 1
        return scoreA, scoreB
    
    def GameOver(N, scoreA, scoreB):
        '''
        function: 定义一局比赛的结束条件
        N: 代表当前局次(第五局为决胜局)
        return: 若比赛结束的条件成立返回真,否则为假
        '''
        if N <= 4:
            return (scoreA>=25 and scoreB>=25 and abs(scoreA-scoreB)>=2)
        else:
            return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2)
    
    if __name__ == "__main__":
        printInfo()
        probA, probB, n = getInputs()
        Time = time()
        winsA, winsB = simNGames(n, probA, probB)
        print("模拟用时: {:.1f}s".format(time()-Time))
        printResult(n, winsA, winsB)
    

      效果如下:

  • 相关阅读:
    搭建selenium+python自动化环境
    编写函数计算一个数字的长度
    编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。
    求m-n之间数字的和
    编写一个函数,生成4位数字的验证码
    编写一个函数,在页面上输出一个N行M列的表格,表格内容填充0~100的随机数字
    编写一个函数,计算三个数字的大小,按从小到大的顺序输出
    编写函数,判断一个字符串的内容是不是纯数字
    编写函数,求圆的面积
    编写一个函数,计算两个数字的和差积商
  • 原文地址:https://www.cnblogs.com/zk1135/p/10869995.html
Copyright © 2011-2022 走看看