zoukankan      html  css  js  c++  java
  • 羽毛球比赛

    1.将羽毛球比赛分析分解为以下几个小步骤

    1.1打印程序的介绍性信息式
    1.2获得程序运行参数:A(A的能力值),B(B的能力值),n(比赛场次)
    1.3利用球员AB的能力值,模拟n场比赛
    1.4输出球员AB获胜的场次及概率

    2.将各个步骤定义成函数来实现:

        代码如下:

    # -*- coding: utf-8 -*-
    """
    Spyder Editor
    
    This is a temporary script file.
    
    author@foldline 学号:2018310143029
    """
    
    from random import *
    #顶层设计
    def main():
        printIntroduce()#打印程序的介绍信息
        probabilityA,probabilityB,n=getInputs()#通过getsInputs函数来获取2个球员的能力值和比赛次数
        winsA,winsB=simulateNGames(n,probabilityA,probabilityB)#通过simulateNGames()求得2个球员在n次比赛中获胜的次数
        printSummary(winsA,winsB)#通过printSummary()来输出比赛的结果信息
        
    #第二阶段
    def printIntroduce():
        print('学号:2018310143029')
        print('这个程序模拟两个选手A和B的羽毛球竞技比赛')
        print('程序运行需要A和B的能力值')
        
    def getInputs():
        a=eval(input('请输入选手A的能力值(0~1):'))
        b=eval(input('请输入选手A的能力值(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()

    3.运行结果如图:

    3.1.能力值高:

    3.2.能力值低:

    4.用pyinstaller打包可执行文件:

  • 相关阅读:
    Climbing Stairs
    交换排序
    解析Ceph: Snapshot
    OpenStack Hacker养成指南
    从UnitedStack OS 1.0 Preview试用申请问卷调查学习OpenStack
    Tun/Tap interface tutorial
    Linux下的TUN/TAP编程
    基于KVM的虚拟化研究及应用
    Linux 上的基础网络设备详解
    linux下TUN/TAP虚拟网卡的使用
  • 原文地址:https://www.cnblogs.com/foldline/p/10870061.html
Copyright © 2011-2022 走看看