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

时间:2022-03-04 04:49:27

一、模拟体育比赛分析

         例:乒乓球设规则如下:

         一局比赛中: 先赢得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()语句否则程序运行结束会自动弹出,无法查看结果