第八章 程序设计方法学
8.1 体育竞技分析
(1)分析
用计算机去模拟N场比赛的进行
抽象比赛过程+自动执行N场比赛
(2)自顶向下设计
将总问题表达为若干个小问题组成的形式
使用同样的方法处理小问题
直到每个小问题都能被计算机清晰的解决
(3)自底向上执行
逐步组建复杂系统并能够完成有效测试:
分单元测试,逐步组装
按照自顶向下相反的路径操作
直至系统的各部分以及组装的思路都经过测试和验证
#自顶向下的设计和自底向上的执行时有效的通路组合
(4)程序整体设计与步骤
①打印程序的介绍性信息
-printIntro()
②获得程序运行参数:ProA、ProB、n
-getInputs()
③利用球员A和B的能力值,模拟n局比赛
-simNGames() ---->>>>-simOneGame()----->>>>-gameOver()
④输出球员A和B获胜比赛的场次及概率
-printSummary()
(5)按部分进行设计
#介绍性内容,提高用户体验:
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(winsA,winsB):
n = winsA + winsB
print("竞技分析开始,共模拟{}场比赛".format(n))
print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
#模拟N次比赛
def simNGames(n,ProA,ProB):
winsA,winsB = 0,0
for i in range(n):
scoreA,scoreB = simOneGame(ProA,ProB)
if scoreA > scoreB:
winsA +=1
else:
winsB +=1
return winsA,winsB
#模拟一局比赛
def simOneGame(ProA,ProB):
scoreA,scoreB = 0,0
serving = "A"
while not gameOver(scoreA,scoreB):
if serving == "A":
if random() < ProA:
scoreA += 1
else:
serving = "B"
else:
if random() < ProB:
scoreB += 1
else:
serving = "A"
return scoreA,scoreB
#判断一局比赛是否结束
def gameOver(a,b):
return a==15 or b==15
#当a或b等于15时返回true
#在调用时a、b分别对应选手A、B的当前的分
#主函数
from random import random
def main():
printIntro()
ProA,ProB,n = getInputs()
winsA,winsB = simNGames(n,ProA,ProB)
printSummary(winsA,winsB)
8.2 python程序设计思维
(1)三种人类思维特征
逻辑思维:推理和演绎,以数学为代表
实证思维:实验和验证,以物理为代表
计算思维:设计和构造,计算机为代表
(2)计算思维
抽象问题的计算过程,利用计算机自动化求解
#计算思维是基于计算机的抽象思维
(3)量化分析
利用大量的历史数据,通过机器学习的方法,预测未来的涨跌,并使用计算机自动完成交易
(4)计算生态
开源运动---->>>>大教堂模式、集市模式
开源思想深入演化和发展,形成了计算生态—技术的自我演化路径
计算生态的特征:
以开源项目为代表的大量第三方库----python提供超15W个第三方库
库的建设经过野蛮生长和自然选择----同一个功能可以由2个以上的库完成
库之间相互关联使用,依存发展----python库之间广泛联系,逐级封装
社区庞大,新技术更迭迅速----AlphaGo深度学习算法采用python语言开源
#API(应用程序编写接口)是经过顶层设计的产物,不是野蛮生长、发展出来的产物
(5)用户体验:从实现功能到关注体验
用户体验:从用户的角度对产品建立主观感受和认识
进度展示、异常处理、打印输出、日志文件、帮助信息
(6)程序设计模式
IPO、自顶向下设计、模块化设计、配置化设计
(7)应用开发的步骤:从应用需求到软件产品
产品定义、系统架构、设计实现、用户体验
8.3 python第三方库
pypi.org
PSF
pip方法、集成方法、文件方法
(1)pip(主要方式)
pip install
pip install -U
pip uninstall
pip download
pip show #展示库的介绍信息
pip search #在介绍信息中搜索关键词,展示相关库
pip list #列出已安装第三方库
(2)集成安装
Anaconda-------数据分析、数据展示
(3)文件安装
UCI
8.4 OS库的使用
(1)基本介绍
OS库提供通用的、基本的操作系统交互功能
#常用路径操作、进程管理、环境参数
#路径操作:os.path字库,处理文件路径及信息
#进程管理:启动系统中其他程序
#环境参数:获得系统软硬件信息等环境参数
(2)os库之路径操作
os.path子库,以path为入口,用于操作和处理文件路径
import os.path or import os.path as op
Ⅰ os.path.abspath(path):返回path在当前系统中的绝对路径
Ⅱ os.path.normpath(path):归一化path的表示形式,统一用\分隔
Ⅲ os.path.relpath(path):返回当前程序与文件之间的相对路径
Ⅳ os.path.dirname(path):返回path中的目录名称
Ⅴ os.path.basename(path):返回path中最后的文件名称
Ⅵ os.path.join(path,*paths):组合path与paths,返回一个路径字符串
Ⅶ os.path.exists(path):判断path对应的文件和目录是否存在,返回True or False
Ⅷ os.path.isfile(path):判断path所对应是否为已存在文件,返回True or False
Ⅸ os.path.isdir(path):判断path所对应是否为已存在目录,返回True or False
Ⅹ
os.path.getatime(path):返回path对应文件或目录上一次的访问时间
os.path.getmtime(path):返回path对应文件或目录上一次的修改时间
os.path.getctime(path):返回path对应文件或目录的创建时间
time.ctime:将系统内部的时间数字转变为用户可读的形式
ⅩI os.path.getsize(path):返回path对应文件的大小,以字节为单位
(3)os库之进程管理
os.system(command)
linux执行命令
windows返回执行命令后的返回信息
(4)os库之环境参数:获取、改变系统的环境信息
os.chdir(path):修改当前程序操作的路径
os.getcwd():返回程序的当前路径
os.getlogin():获得当前系统登陆的用户名
os.cpu_count():获得当前系统cpu的数量
os.urandom(n):随机生成n个字节长度的随机字符串,通常用于解加密运算
8.5 第三方库自动安装脚本
#BatchInstall.py
import os
libs = {, and balabala}
try:
for lib in libs:
os.system("pip install"+lib)
print("successful")
except:
print("Failed Somehow")