使用Python进行体育竞技分析(预测球队成绩)


Posted in Python onMay 16, 2019

今天我们用python进行体育竞技分析,预测球队成绩

一. 体育竞技分析的IPO模式 :

输入I(input):两个球员的能力值,模拟比赛的次数(其中,运动员的能力值,可以通过发球方赢得本回合的概率来表示,

一个能力值为0.8的球员,在他发球时,有80%的可能性赢得1分)

处理P(process):模拟比赛过程

输出O(output):两个球员获胜的概率

该体育竞技程序,我们采用自顶向下的设计方法。

自顶向下的设计是一种解决复杂问题的行之有效的方法。其步骤如下

使用Python进行体育竞技分析(预测球队成绩)

自顶向下设计的基本思想,如下图:

使用Python进行体育竞技分析(预测球队成绩)

二.我们首先采用兵乓球的比赛规则

一局比赛中,先得11分的一方为胜方,如果10平后,则比对方多得两分为胜方

一场比赛中,采用7局四胜的方式

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Wed May 15 12:49:17 2019
@author: moyulin
"""
from random import random
def printIntro():
  print("BY 2018310143103")
  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):
  WinsA, WinsB = 0, 0
  winsA, winsB = 0, 0
  for i in range(1,n+1):
    scoreA, scoreB = simOneGame(probA, probB)
    if scoreA > scoreB:
      winsA += 1
    else:
      winsB += 1
    if i%7==0:
      if winsA>winsB:
        WinsA+=1
        print("单打第{}场胜利的为A".format(int(i/7)))
      else:
        WinsB+=1
        print("单打第{}场胜利的为B".format(int(i/7)))
      winsA,winsB=0,0
  return WinsA, WinsB
def gameOver(a,b):
  if a>=10 and b>=10:
    if abs(a-b)==2:
      return True
  if a<10 or b<10:
    if a==11 or b==11:
      return True
  else:
    return False
def simOneGame(probA, probB):
  scoreA, scoreB = 0, 0
  serving = "A"
  while not gameOver(scoreA, scoreB):
    if serving == "A":
      if random() < probA:
        scoreA += 1
      else:
        scoreB +=1
        serving="B"
    else:
      if random() < probB:
        scoreB += 1
      else:
        scoreA += 1
        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()

运行结果如下:

使用Python进行体育竞技分析(预测球队成绩)

三.运用pyinstaller打包应用程序,使之可运行

win+cmd打开命令行

1.安装pyinstaller库

pip install pyinstaller

安装完成后就可以使用了,下面介绍pyinstaller的部分使用方法

-F, ?onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用

-D, ?onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护

-K, ?tk 在部署时包含 TCL/TK

-a, ?ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.

-d, ?debug 产生debug版本的可执行文件

-w,?windowed,?noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)

-c,?nowindowed,?console

2.打开命令行使用

输入

pyinstaller -F C:\#py文件地址

图例

 使用Python进行体育竞技分析(预测球队成绩)

最后回到根目录上会看到dist文件夹,里面有个exe文件,直接运行即可,如图

 使用Python进行体育竞技分析(预测球队成绩)

四.模拟体育竞技分析之篮球

假设谁先获得100分谁胜利

代码如下

from random import random
def printIntro():
  print("by 2018310143103")
  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):
  winsA, winsB = 0, 0
  for i in range(n):
    scoreA, scoreB = simOneGame(probA, probB)
    if scoreA > scoreB:
      winsA += 1
    else:
      winsB += 1
  return winsA, winsB
def gameOver(a,b):
  return a==100 or b==100
def simOneGame(probA, probB):
  scoreA, scoreB = 0, 0
  serving = "A"
  while not gameOver(scoreA, scoreB):
    if serving == "A":
      if random() < probA:
        scoreA += 1
      else:
        scoreB += 1
    else:
      if random() < probB:
        scoreB += 1
      else:
        scoreA += 1
    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()

运行结果如下

使用Python进行体育竞技分析(预测球队成绩)

总结

以上所述是小编给大家介绍的使用Python进行体育竞技分析(预测球队成绩),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python中强大的format函数实例详解
Dec 05 Python
django模板结构优化的方法
Feb 28 Python
对django views中 request, response的常用操作详解
Jul 17 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
如何用python 操作zookeeper
Dec 28 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 #Python
Django 表单模型选择框如何使用分组
May 16 #Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 #Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 #Python
Python 20行简单实现有道在线翻译的详解
May 15 #Python
Python中的字符串切片(截取字符串)的详解
May 15 #Python
python3 property装饰器实现原理与用法示例
May 15 #Python
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
解析strtr函数的效率问题
2013/06/26 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
编写多线程Python服务器 最适合基础
2018/09/14 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
生物科学专业毕业生求职信
2014/06/02 职场文书
坎儿井导游词
2015/02/09 职场文书
聘任证明怎么写
2015/03/02 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏