• 预测羽毛球赛成绩学习笔记


    任务要求:  

    编写程序,模拟体育竞技分析

    羽毛球比赛规则

    >21分制,3局2胜为佳

    >每球得分制

    >每回合中,取胜的一方加1分

    >当双方均为20分时,领先对方2分的一方赢得该局比赛

    >当双方均为29分时,先取得30分的一方赢得该局比赛

    >一局比赛的获胜方在下一局率先发球

    详情参考http://www.vxixi.com/

    from random import random
    def main():
        printIntro()#打印程序的介绍信息
        probA, probB, n = getInputs()#通过getInput输入a,b,n
        winsA, winsB = simNGames(n, probA, probB)#通过simNGames()求得2个球员在n次比赛中获胜的次数
        printSummary(winsA, winsB)#通过printSummary()来输出比赛的结果信息
    
    #第二阶段
    
    def printIntroduce():
        print('这个程序模拟两个选手A和B的羽毛球竞技比赛')
        print('程序运行需要A和B的能力值')
    
        
    
    def getInputs():
        a=eval(input('请输入选手A的能力值(0~1):'))
        b=eval(input('请输入选手B的能力值(0~1):'))
        n=eval(input('比赛胜利达到多少局获胜:'))
        return a,b,n
    
    def simulateNGames(n,probabilityA,probabilityB):
        '''定义球员A,B赢得比赛的次数,初始值为0,
            通过for循环来模拟n次比赛
            用simulateOneGame()来模拟一场比赛'''
    
        winsA,winsB=0,0
        while not judge(n,winsA,winsB):
    
            '''返回本场比赛2个球员的得分,根据得分来确定本场比赛的胜负'''
    
            scoreA,scoreB=simulateOneGame(probabilityA,probabilityB)
            if scoreA>scoreB:
                winsA+=1
            else:
                winsB+=1
        return winsA,winsB
    
    def printSummary(winsA,winsB):
    
        n=winsA+winsB
    
        print('
    比赛开始,共模拟%d场比赛'%n)
    
        print('选手A获胜{}场比赛,占比{:0.1%}'.format(winsA,winsA/n))
    
        print('选手B获胜{}场比赛,占比{:0.1%}'.format(winsB,winsB/n))
    
    #第三阶段
    def simulateOneGame(probabilityA,probabilityB):
        '''每场比赛,2个球员的得分初始为0,设定每场比赛总是A先发球,
            用random函数生成一个随机小数,范围在【0,1)内'''
    
        scoreA,scoreB=0,0
        starting='A'
        while not gameOver(scoreA,scoreB):
            if starting=='A':
                if random()<probabilityA:
                    scoreA+=1
                else:
                    scoreB+=1
                    starting='B'
            else:
                if random()<probabilityB:                
                    scoreB+=1
                else:
                    scoreB+=1
                    starting='A'
        return scoreA,scoreB
     
    def gameOver(a,b):
        '''任意一方达到20分就结束比赛'''
        if a>29 or b>29:
            return True
        elif a>20 or b>20:
            if abs(a-b)>1:
                return True
            else:
                return False
    
    def judge(n,winsA,winsB):
        if winsA==n or winsB==n:
            return True
        else:
            return False
    
    main()
    进行代码
  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/yeluozhiqiumax/p/12927090.html
Copyright © 2020-2023  润新知