zoukankan      html  css  js  c++  java
  • 预测羽毛球赛成绩学习笔记

    任务要求:  

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

    羽毛球比赛规则

    >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()
    进行代码
  • 相关阅读:
    一行JS代码实现的滑动门
    一款JS+CSS打造绝对经典的资讯网站滑动门特效
    【荐】JS封装的一个无限级的下拉树形菜单
    JS+CSS实现漂亮实用的红色导航菜单
    JS+CSS仿网易的选项卡TAB标签样式
    JS+CSS实现的不规则TAB选项卡效果
    jQuery仿FLASH响应鼠标滚动的动感菜单
    纯CSS仿迅雷首页的菜单导航代码
    JS+CSS仿雅虎首页网站快捷入口的切换效果
    【荐】Jquery+CSS打造的泡沫弹出框式的侧边蓝色导航菜单
  • 原文地址:https://www.cnblogs.com/yeluozhiqiumax/p/12927090.html
Copyright © 2011-2022 走看看