第八章 程序设计方法学
方法论
-理解并掌握一批Python程序设计思维
实践能力
-学会编写更有设计感的程序
8.1 实例13:体育竞技分析
1、问题分析
体育竞技分析:高手过招,胜负只在毫厘之间
-需求:毫厘是多少?如何科学分析体育竞技比赛?
-输入:球员的水平
-输出:可预测的比赛成绩
体育竞技分析:模拟N场比赛
-计算思维:抽象+自动化
-模拟:抽象比赛过程+自动化执行N场比赛
-当N越大时,比赛结果分析会越科学
比赛规则
-双人击球比赛:A&B,回合制,5局3胜
-开始时一方先发球,直至判分,接下来胜者发球
-球员只能在发球局得分,15分胜一局
2、自顶向下(设计)
解决复杂问题的有效方法
-将一个总问题表达为若干个小问题组成的形式
-使用同样的方法进一步分解小问题
-直至,小问题可以用计算机简单明了的解决
3、自底向上(执行)
逐步组件复杂系统的有效测试方法
-分单元测试,逐步组装
-按照自顶向下相反的路径操作
-直至,系统各部分以组装的思路都经过测试和验证
4、体育竞技分析
程序总体框架及步骤
-步骤1:打印程序的介绍性信息式
-步骤2:获得程序运行参数:proA, proB, n
-步骤3:利用球员A和B的能力值,模拟n局比赛
-步骤4:输出球员A和B获胜比赛的场次及概率
四个步骤分别对应四个函数:
-步骤1:printInfo()
-步骤2:getInputs()
-步骤3:simNGames()
-步骤4:printSummary()
第一阶段:程序总体框架及步骤
def main():
printIntro()
probA, probB, n = getInputs()
winsA, winsB = simNGames(probA, probB, n)
printSummary(winsA, winsB)
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("模拟比赛的场次:"))
return a, b, n
def printSummary