模拟体育竞技分析
学习目标 了解计算思维的概念 掌握自顶向下的设计方法 掌握自底向上的执行过程 了解计算机生态和模块编程思想 掌握Python第三方库的安装方法 掌握Python源文件的打包方法 一、体育竞技分析实例: 1.设规则如下: 21分制,三局两胜为佳 每球得分制 每回合中取胜的一方的一分 双方均为20分时,领先对方2分一方获胜 双方均为29分时,先到达30分一方获胜 一局比赛中获胜方在下一局率先开球 2.Python 3.x 代码(自顶向下的设计方法)如下
from random import random print("学号尾数08") def printIntro(): 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("模拟比赛的场次: ")) m = eval(input("模拟次数:")) return a, b, n, m def simNGames(n, probA, probB): winsA, winsB = 0, 0 scoreA_ls=[] scoreB_ls=[] for i in range(n): scoreA, scoreB = simOneGame(probA, probB) scoreA_ls.append(scoreA) scoreB_ls.append(scoreB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA, winsB,scoreA_ls,scoreB_ls def gameOver(a,b): if(a>=20 or b>=20): if(abs(a-b)==2 and a<=29 and b<=29): return True else: return a==30 or b==30 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: serving="B" else: if random() < probB: scoreB += 1 else: serving="A" return scoreA, scoreB def printSummary(winsA, winsB,m,scoreA_ls,scoreB_ls): n = winsA + winsB print("模型模拟次数{}".format(m)) print("竞技分析开始,共模拟{}场比赛".format(n)) print("A选手各场次得分比分:") print(scoreA_ls) print("B选手各场次得分比分:") print(scoreB_ls) print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n)) print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n)) def main(): printIntro() probA, probB, n, m= getInputs() for i in range(m): winsA, winsB,scoreA_ls,scoreB_ls = simNGames(n, probA, probB) printSummary(winsA, winsB,m,scoreA_ls,scoreB_ls) main()
3.运行输入及结果:
学号尾数08 这个程序模拟两个选手A和B的羽毛球竞技比赛 程序运行需要A和B的能力值(以0到1之间的小数表示) 请输入选手A的能力值(0-1): 0.5 请输入选手B的能力值(0-1): 0.5 模拟比赛的场次: 5 模拟次数:5 模型模拟次数5 竞技分析开始,共模拟5场比赛 A选手各场次得分比分: [30, 24, 19, 30, 21] B选手各场次得分比分: [17, 30, 21, 16, 19] 选手A获胜3场比赛,占比60.0% 选手B获胜2场比赛,占比40.0% 模型模拟次数5 竞技分析开始,共模拟5场比赛 A选手各场次得分比分: [27, 26, 21, 30, 20] B选手各场次得分比分: [25, 28, 19, 20, 22] 选手A获胜3场比赛,占比60.0% 选手B获胜2场比赛,占比40.0% 模型模拟次数5 竞技分析开始,共模拟5场比赛 A选手各场次得分比分: [18, 20, 21, 30, 20] B选手各场次得分比分: [20, 18, 19, 19, 18] 选手A获胜4场比赛,占比80.0% 选手B获胜1场比赛,占比20.0% 模型模拟次数5 竞技分析开始,共模拟5场比赛 A选手各场次得分比分: [30, 23, 20, 20, 18] B选手各场次得分比分: [16, 21, 18, 30, 20] 选手A获胜3场比赛,占比60.0% 选手B获胜2场比赛,占比40.0% 模型模拟次数5 竞技分析开始,共模拟5场比赛 A选手各场次得分比分: [18, 18, 30, 19, 30] B选手各场次得分比分: [30, 20, 21, 21, 17] 选手A获胜2场比赛,占比40.0% 选手B获胜3场比赛,占比60.0%
二、使用pyinstaller对上述代码文件打包成可执行文件(可在没有安装Python的环境中运行) 方法如下: 安装pyinstaller:在命令行(控制台)下用pip安装,如 C:\Users\Benny>pip install pyinstaller 打包 :\>pyisntaller dpython.py 或 :\>pyinstaller D:\codes\dpython.py 生成一个独立可执行文件 :\>pyinstaller -F dpython.py 如果遇到生成文件运行后闪退的问题:可以在程序最后加上 n=input("请输入按键退出")
5.截图如下

浙公网安备 33010602011771号