使用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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python实现简单状态框架的方法
Mar 19 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
Dec 09 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Python 实现数组相减示例
Dec 27 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
如何使用Python抓取网页tag操作
Feb 14 Python
如何利用Python动态模拟太阳系运转
Sep 04 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
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python标准库os.path包、glob包使用实例
2014/11/25 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
简单了解django索引的相关知识
2019/07/17 Python
详解Python中的分支和循环结构
2020/02/11 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
预备党员思想汇报
2014/01/08 职场文书
党支部书记先进事迹
2014/01/17 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
nginx优化的六点方法
2021/03/31 Servers
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers