使用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抓取京东商城手机列表url实例代码
Dec 18 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Django框架模板介绍
Jan 15 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 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生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python让函数不返回结果的方法
2020/06/22 Python
Python实现自动签到脚本功能
2020/08/20 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
事务机电主管工作职责
2014/02/25 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
车辆年检委托书范本
2014/10/14 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers