使用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中的并发编程实例
Jul 07 Python
Python入门篇之数字
Oct 20 Python
Python实现字典的key和values的交换
Aug 04 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
学习Django知识点分享
Sep 11 Python
Python发送手机动态验证码代码实例
Feb 28 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
Python爬虫使用bs4方法实现数据解析
Aug 25 Python
Python3中的tuple函数知识点讲解
Jan 03 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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
EXT中xtype的含义分析
2010/01/07 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
小学生获奖感言范文
2014/02/02 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Python机器学习之PCA降维算法详解
2021/05/19 Python
python脚本框架webpy的url映射详解
2021/11/20 Python