一、计算思维
利用计算机求解问题的思维——计算思维
思维种类 | 特征 | 代表 |
实证思维 | 实验和验证 | 物理学科 |
逻辑思维 | 推理和演绎 | 数学学科 |
计算思维 | 设计和构造 | 计算机学科 |
二、程序设计方法论
A:自顶向下
#该python程序命名为:main(MatchAnalysis两个球员A和B分别赢得比赛的概率) #MatchAnalysis.py from random import random #调用random函数 def printIntro(): #必要的说明 print("这个程序模拟两个选手的某种竞技比赛") 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 simNGames(n,probA,probB): #模拟比赛并返回结果,计数循环 winsA,winsB=0,0 for i in range(n): scoreA,scoreB=simOneGame(probA,probB) #设计了一个新的函数simOneGame()来模拟一场比赛 #这个函数需要知道每个球员赢得比赛的概率,返回两个球员的最终得分。 if scoreA > scoreB: winsA +=1 else: winsB +=1 return winsA,winsB def gameOver(a,b): #当任一个球员达到15分时比赛结束 return a==15 or b==15 def simOneGame(probA,probB): # 尽可能地去细节模拟比赛的过程 scoreA,scoreB=0,0 serving='A' #球员A发球 while not gameOver(scoreA,scoreB): #设计了gameOver():函数,来表示比赛结束的条件 #’while‘封装原因:简化根据不同规则修改函数的代价,提高代码可维护性 if serving=="A": if random()<probA/(probA+probB): scoreA+=1 else: serving="B" else: if random()<probB/(probA+probB): scoreB+=1 else: serving="A" return scoreA,scoreB def printSummary(winsA,winsB): #输出结果 n=winsA+winsB print('竞技分析开始,共模拟{}场比赛'.format(n)) print('选手A获胜{}场比赛,占比{:0.1%}'.format(winsA,winsA/n)) print('选手B获胜{}场比赛,占比{:0.1%}'.format(winsB,winsB/n)) def main(): printIntro() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB) main()
结果演示:
程序规模 | 运行思维 | |
自顶向下 | 小规模 | 把大问题分解成多个小问题 再将碎片组合起来 |
自底向上 | 中、大规模 | 先运行和测试每一个小函数 再测试由基础函数组成的整体函数 |
B.自底向上
原理:借助python解释器提供import保留字辅助开展单元测试
语法格式:import<源文件名称>
例如:对gameOver()函数进行单元测试
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/tech/python/275868.html