用python进行对乒乓球的比赛分析,并且将该程序进行封装

2、单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。
重点:

       思维方式:自顶向下即将一个复杂问题分解成几个问题,再细分成一个个具体的小问题,从而来解决复杂问题。自底向上为自顶向下的逆过程,即解决复杂问题的方法,逐步解决一个个小问题,来达成目的。

2.将体育竞技分析分解为以下几个小步骤

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

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

分解代码

from random import random             #引用随机库
def printIntro():          #打印程序介绍信息
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
def getInputs():           #获得程序运行参数
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手B的能力值(0-1): "))
    n = eval(input("模拟比赛的场次: "))
    return a, b, n
def simNGames(n, probA, probB):    #进行N场比赛  每场比赛是7局4胜制

def gameOver(a,b):                     #正常比赛结束

def gameOver2(a,b):                    #抢12比赛结束

def simOneGame(probA, probB):         #进行一场比赛  

def simtwoGame2(probA,probB):     #进行抢12比赛

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():

完整的代码如下:

from random import random
def printIntro():          #打印程序介绍信息
    print("信计一班10号石贵雨进行比赛分析结果:")
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
def getInputs():           #获得程序运行参数
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手B的能力值(0-1): "))
    n = eval(input("模拟比赛的场次: "))
    return a, b, n
def simNGames(n, probA, probB):    # 进行N场比赛
    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比赛结束
   if abs((a-b))>=2
  return a,b
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"
    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()

4、模拟1000场单打7局4胜的比赛情况结果:

5.模拟团队打5局3胜的情况:

from random import random
def printIntro():          #打印程序介绍信息
    print("信计一班13号郑志杰进行比赛分析结果:")
    print("这个程序模拟两个队伍A和B的某种竞技比赛")
    print("程序运行需要队伍A和队伍B的能力值(以0到1之间的小数表示)")
def getInputs():           #获得程序运行参数
    a = eval(input("请输入队伍A的能力值(0-1): "))
    b = eval(input("请输入队伍B的能力值(0-1): "))
    n = eval(input("模拟比赛的场次: "))
    return a, b, n
def simNGames(n, probA, probB):    # 进行N场比赛
    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)

模拟1000场打5局3胜的比赛情况

模拟篮球比赛:规则7局4胜,同样是先得11分的一方为胜,10平的话就要进行抢12的比赛

from random import random
def printIntro():          #打印程序介绍信息
    print("信计一班13号郑志杰进行比赛分析结果:")
    print("这个程序模拟两个篮球队伍A和B的某种竞技比赛")
    print("程序运行需要篮球队伍A和队伍B的能力值(以0到1之间的小数表示)")
def getInputs():           #获得程序运行参数
    a = eval(input("请输入篮球队伍A的能力值(0-1): "))
    b = eval(input("请输入篮球队伍B的能力值(0-1): "))
    n = eval(input("模拟比赛的场次: "))
    return a, b, n
def simNGames(n, probA, probB):    # 进行N场比赛
    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()

比赛结果如图:

6、最后将该程序进行封装

1、 首先要安装pyinstall库,在cmd中用输入pip install  PyInstaller

2.接着会自动下载,安装成功后 通过Pyinstall自带命令进行打包

安装过程就不截图了。

3.控制台输入  Pyinstaller  -F  xxx(pyw文件路径,例如c://user/desktop/demo.py)

4.打包后exe文件路径在项目下dict文件夹中  具体可以看日志

具体情况:

执行情况:

在dict文件下可查看该exe程序

原文地址:https://www.cnblogs.com/wangxinyu520/p/10869625.html

时间: 2024-11-09 06:19:00

用python进行对乒乓球的比赛分析,并且将该程序进行封装的相关文章

Python模块的交叉引用问题分析

实际项目中遇到python模块相互引用问题,查资料,说是通过import局部导入的方式可以避免错误,资料如附录所述. 但更改后测试还是会出错,很疑惑!? 如果哪位读者有好的解决方法,敬请留言说明,谢谢. 所以,最好的方法是不进行交叉引用,如果需要就单独分一个模块出来. 附录:Python模块的交叉引用问题解读:How can I have modules that mutually import each other? 有下面两个文件相互引用,Python解释器报错. foo.py: from

使用python操作elasticsearch实现数据插入分析

前言: 例行公事,有些人可能不太了解elasticsearch,下面搜了一段,大家瞅一眼. Elasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问Elasticsearch,还可以通过支持Java.JavaScript.Python及更多语言的客户端库来访问.它也支持集成Apache Hadoop环境.Elasticsearch在有些处理海量数据的公司中已经

使用python中的matplotlib进行绘图分析数据

http://blog.csdn.net/pipisorry/article/details/37742423 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. 在Linux下比较著名的数据图工具

Hadoop源码分析—— Job任务的程序入口

这篇文章大致介绍Hadoop Job的程序是如何启动的. 通常用Java编写的Hadoop MapReduce程序是通过一个main方法作为程序的整个入口,如下: public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new CalculateSumJob(),args); System.exit(res);} 可以看到这个Job任务的MapR

VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然后进行转换. 概述 小程序主界面如下: 首先选择一个日期和类别,从命名上对待分析的Excel文件进行过滤.点击[浏览]选择待分析的Excel文件所在的目录, 程序中会获取所有子目录.然后点击[执行分析]就会按照左边CheckBox中的选择进行分析,分析结果显示在每一行中间.[修改配置]可以对分析规则

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

升级程序启动后,首先会连接服务器 private void Connect() { try { int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]); connnectionInfo = new ConnectionInfo(IPAddress, port); connection = TCPConnection.GetConnection(connnectionInfo)

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装.同时通过搜索了解了如何对本地Mongo数据库进行权限设置(没有实践本地数据库的用户权限设置.) 按个人规划,今天是初步了解学习MongoDb数据库的最后一个学习日,后续将在真正使用此数据库时,再对其进行深入研究. 一.今天完成了两个可

vscode源码分析【三】程序的启动逻辑,性能问题的追踪

第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 启动追踪 代码文件:src\main.js 如果指定了特定的启动参数:trace vscode会在启动之初,执行下面的代码: const contentTracing = require('electron').contentTracing; const traceOptions = { categoryFilter: args['trace-category-f

【Python数据分析】用户通话行为分析

主要工作: 1.对从网上营业厅拿到的用户数据.xls文件,通过Python的xlrd进行解析,计算用户的主叫被叫次数,通话时间,通话时段. 2.使用matplotlib画图包,将分析的结果直观的绘制出来. 具体步骤: 1.分析须要的内容 excel文件中包含很多信息,我们分析的时候须要用到的包括,通话起始时间.通话时长.呼叫类型,号码. 使用xlrd模块,读取excel中的数据,用列表的形式保存下来. 1 #coding=utf-8 2 import xlrd 3 4 def readData(