一、计算思维
利用计算机求解问题的思维——计算思维
思维种类 | 特征 | 代表 |
实证思维 | 实验和验证 | 物理学科 |
逻辑思维 | 推理和演绎 | 数学学科 |
计算思维 | 设计和构造 | 计算机学科 |
二、程序设计方法论
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()函数进行单元测试
需要注意的是,要加一个print()函数,来获取布尔值
且需要将原py文件进行打包处理
如此进行测试,可以获得如下结果:
通过输入比赛分数可以测试gameOver()函数的执行结果,例如:
同理,需要加入print()函数来获取布尔值,结果如图
方法二:
三、计算生态
Python官方第三方库索引功能网址:
python标准库:
Python3.5.2版本Windows默认安装路径为:C:\Users\<用户名>\AppData\Local\Programs\Python\python35-32
Python通过新一代安装工具pip管理大部分python第三方库的安装
四、基本的Python内置函数
Python 内置函数 | 菜鸟教程 (runoob.com)