预测体育竞技比赛结果(新人练手)

Posted dxl123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了预测体育竞技比赛结果(新人练手)相关的知识,希望对你有一定的参考价值。

一、模拟体育比赛分析

         例:乒乓球设规则如下:

         一局比赛中: 先赢得11分为胜 10平后  先多赢得2分为胜

         单打淘汰赛 :7句4胜

       代码如下

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Wed May 15 11:38:02 2019
 4 
 5 @author: lenovo
 6 """
 7 
 8 import random
 9 import math
10 def printIntro():
11     print("这个程序模拟量个选手A和B的乒乓球比赛")
12     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
13     print("作者:呆。   (02)")
14 def getInputs():
15     a = eval(input("请输入选手A的能力值(0-1): "))
16     b = eval(input("请输入选手B的能力值(0-1): "))
17     n = eval(input("模拟比赛的场次: "))
18     return a, b, n
19  
20 def printSummary(winsA, winsB):
21     n = winsA + winsB
22     print("竞技分析开始, 共模拟{}场比赛".format(n))
23     print("选手A获胜{}场比赛, 占比{:0.1%}".format(winsA, winsA/n))
24     print("选手B获胜{}场比赛, 占比{:0.1%}".format(winsB, winsB/n))
25  
26 def gameOver(a, b):
27     return (a==11 and b<10) or (b==11 and a<10) or (a>=10 and b>=10 and math.fabs(a-b)==2)
28     
29 def simoneGame(probA, probB):
30     scoreA, scoreB = 0, 0
31     if random.random() < 0.5:
32         serving = "A"
33     else :
34         serving = "B"
35     while not gameOver(scoreA, scoreB):
36         if serving == "A":
37             if random.random() < probA:
38                 scoreA += 1
39             else:
40                 serving = "B"
41         else:
42             if random.random() < probB:
43                 scoreB += 1
44             else:
45                 serving = "A"
46     return scoreA, scoreB
47 def simOneGame(probA, probB):
48     winsA, winsB = 0, 0
49     for i in range(7):
50         scoreA, scoreB = simoneGame(probA, probB)
51         if scoreA > scoreB:
52             winsA += 1
53         else:
54             winsB += 1
55     return winsA, winsB
56 def simNGames(n ,probA, probB):
57     winsA, winsB = 0, 0
58     for i in range(n):
59         scoreA, scoreB = simOneGame(probA, probB)
60         if scoreA > scoreB:
61             winsA += 1
62         else:
63             winsB += 1
64     return winsA, winsB
65  
66 def main():
67     printIntro()
68     probA, probB, n = getInputs()
69     winsA, winsB = simNGames(n, probA, probB)
70     printSummary(winsA, winsB)
71 main()

结果如下:

技术图片

技术图片

 技术图片

 

 

下一步就是将上述程序进行打包了,打包前我们要再安装pyinstaller和pywin32

安装步骤如下:

点击键盘上的"Win"键+"R"键,打开命令行窗口,输入pip install pyinstaller,同理安装pywin32也是一样的,只需将pyinstaller替换成pywin32即可,再详细的步骤可参考我的其他随笔,里面都有关于安装库函数的详细步骤,这里就不再赘述了。

安装完毕后,一样在命令行窗口中操作,输入pyinstaller -F **.py(**是要打包的程序名),点击回车键,此时会输出很多文字,等到停止输出时,在最后的地方可以找到打包完成的脚本存储位置,如下图技术图片

倒数第二行处( C:\\Users\\lenovo\\AppData\\Local\\Programs\\Python\\Python37\\dist\\测试.exe)即为打包后的脚本存储位置

找到脚本位置,打开脚本,输入数据,得出结果,效果见下图:

技术图片

这里注意要在程序最后加上input()语句否则程序运行结束会自动弹出,无法查看结果

以上是关于预测体育竞技比赛结果(新人练手)的主要内容,如果未能解决你的问题,请参考以下文章

预测球队比赛成绩

try except函数测试函数

体育竞技

体育竞技模拟比赛

解密体育背后AI黑科技:花样滑冰动作识别多模视频分类和精彩片段剪辑

球队比赛预测