最后一课:体育竞技问题分析
我们可以用计算机程序来模拟这场比赛,就像阿法狗的自我对弈一样,不过我们做的只是简化版。
输入:球员的水平
输出: 可预测的比赛成绩
体育竞技分析:模拟N场比赛
模拟抽象比赛过程+自动化执行程序
首先设计一种比赛规则,双人击球比赛 A B 两位选手和五局三胜的回合制,开始时一方先发球,直至判分,接下来胜者发球,第一局不得分,15分胜一局。注意:当模拟的场数N越大,比赛结果分析会越科学。
先介绍设计方法
自顶向下设计
一个问题可以划分成小问题以及小问题之间的关系,体育竞技分析是根据球员的能力值进行比赛场次的预测,可以分为四个步骤:
步骤1:打印程序的介绍性信息式
对应函数 -printInfo()
步骤2:获得程序运行参数:proA, proB, n
对应函数 -getInputs()
步骤3:利用球员A和B的能力值,模拟n局比赛
对应函数 -simNGames()
步骤4:输出球员A和B获胜的比赛的场次及概率
对应函数 -printSummary()
看第一阶段代码
接下来我们再逐一的看每一个函数,看我们能否实现它
步骤1的程序
步骤2的程序
步骤4的程序
来看步骤3, 模拟n局比赛,就是n次模拟一局比赛
看代码
simOneGame是定义的模拟一次的分数,然后循环n次就可以获得n局比赛的结果。
那我们怎么模拟一场比赛呢?
示例代码
在一局比赛中,如果一方先获得15分 那么比赛结束。
在模拟一局比赛时,双方根据能力值进行得分,那么能进行多少回合呢?我们又不知道了,所以定义一个gameOver()函数,来盘算一局比赛有没有结束。
完整代码如下
这个程序是可以用的,上面那些分段的程序在结合起来的时候,可能会有变量定义的差异,反正你按照错误提示,肯定可以修改。
运行结果如下
这是python语言的最后一个例子,这个例子主要教会一种思想——分解模块。一个大功能按照逐一的进行分解,不停的细分,同时注意参数的传递。