本节的主要内容包括: 8.1体育竞技分析 8.2Python程序设计思维 8.3Python第三方库安装 8.4 os库的基本使用 8.5第三方库自动安装脚本
本节的主要目标 -方法论 理解并掌握一批Python程序设计思维 -实践能力 学会编写更有设计感的程序
8.1体育竞技分析 -需求:如何分析体育竞技比赛? -输入:球员水平 -输出:可预测的比赛成绩
模拟N场比赛 -计算思维:抽象+自动化 -模拟:抽象比赛过程+自动化执行N场比赛 -当N越大时,比赛结果分析会更科学
比赛规则 -双人击球比赛:A和B,回合制,5局3胜 -开始时一方先发球,直至判分,接下来胜者发球 -球员只能在发球局得分,15分胜一局
自顶向下(分而治之) -将一个总问题表达为若干个小问题组成的形式 -使用同样的方法进一步分解小问题 -直至小问题可以用计算机简单明了的解决
自底向上(执行)(模块化集成) -逐步组建复杂的有效测试方法。 -分单元测试,逐步组装。 -按照自顶向下相反的路径操作。 -直至,系统各部分以组装的思路都经过测验和验证。
8.1体育竞技分析的程序总体框架及步骤 -步骤1:打印程序的介绍性信息式 printInfo() -步骤2:获得程序运行参数:proA,proB和n GetInput() -步骤3:利用球员A和B的能力值,模拟n局比赛 simNGames() -步骤4:输出球员A和B获胜比赛的场次及概率 printSummary()
问题分解  第一阶段信息打印程序编写printInfo()  第一阶段编写获取信息的函数Getinputs()  第一阶段编写球员能力值获取函数  第二阶段 模拟N局比赛  当比赛成绩大于15分的时候,比赛结束  
完整的程序设计构思  关于竞技比赛分析的代码
from random import random
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))
def gameOver(a,b):
return a==15 or b==15
def simOneGame(probA,probB):
scoreA,scoreB=0,0
serving = "A"
while not gameOver(scoreA,scoreB):
if serving=="A":
if random()<probA:
scoreA += 1
else:
serving="B"
else:
if random()<probB:
scoreB += 1
else:
serving="A"
return scoreA,scoreB
def simNGames(n,probA,probB):
winsA,winsB=0,0
for i in range(n):
scoreA,scoreB=simOneGame(probA,probB)
if scoreA>scoreB:
winsA += 1
else:
winsB += 1
return winsA,winsB
def main():
printIntro()
probA,probB,n=getInputs()
winsA,winsB=simNGames(n,probA,probB)
printSummary(winsA,winsB)
main()
8.2节python程序设计思维 8.2.1计算思维与程序设计 -逻辑思维:推理和演绎,数学代表为A->B;B->C则得到A->C -实证四位:实验和验证,物理学代表,引力波和实验 -计算思维:设计和构造,计算机为代表,汉诺塔递归 Computational Thinking 抽象问题的计算过程,利用计算机自动化求解
8.2.2计算生态与Python 语言 -竞争发展;相互依存;迅速更迭 -跟随创新、集成创新、原始创新 
8.2.3用户体验与软件产品
方法1:进度展示 -如果程序设计需要计算时间,可能产生等待,请增加进度条展示 -如果程序有若干步骤,需要提示用户,请增加进度展示 -如果程序可能存在大量 次数的循环,请增加进度展示
方法2:异常处理 -当获得用户输入,对合规性需要检查,需要异常处理 -当读写文件时,对结果进行判断,需要异常处理 -当进行输入输出时,对运算结果进行判断,需要异常处理
其他类方法 -打印输出:特定位置,输出程序运行的过程信息 -日志文件:对程序异常及用户实验进行定期记录 -帮助信息;给用户多种方式提供帮助信息
8.2.4基本程序设计模式 程序的基本模式 IPO -Input -Process -Output

-自顶向下 -模块化设计  
-配置化设计:引擎+配置:程序执行和配置分离,将可选参数配置优化  -应用开发:产品定义,系统架构,设计与实现,用户体验  8.3Python第三方库的安装
-PyPI: Python Package Index -由PSF维护的展示全球Python计算生态的主站 -学会检索并利用PyPI,找到合适的第三方库开发程序 -https://pypi.org/
8.3.1安装Python第三方库的三种方法 1第三方库的pip安装方法,适合99%的第三方库的安装
pip –h
pip install <第三方库名> # 安装指定的第三方库
pip install –U <第三方库名> # 使用-U标签更新已安装的指定第三方库
pip uninstall <第三方库名> # 卸载指定的第三方库
pip download <第三方库名> # 下载但不安装指定的第三方库
pip show <第三方库名> # 列出某个指定第三方库的详细信息
pip search <关键词> # 根据关键词在名称和介绍中搜索第三方库
pip list # 列出当前系统已经安装的第三方库
2.集成安装 结合特定python开发工具批量安装,如Anaconda
3.某些第三方库pip下载后,需要编译再安装 文件安装方法 
使用UCI网页 https://www.lfd.uci.edu/~gohlke/pythonlibs/
本节小结 
8.4os库的基本使用 os库提供通用的、基本的操作系统交互功能 -路径操作:os.path子库,处理文件路径及信息 -进程管理:启动系统中的其他程序 -环境参数:获得系统软硬件信息等环境参数 
8.4.1os库之路径操作 os.path子库以path为入口,用于惭怍和处理文件路径
import os.path
import os.path as op
     8.4.2os库之进程管理 os.system(command) -执行程序或命令command -在windows系统中,返回值为cmd的调用返回信息
import os
os.system("C:\\Windows\\System32\\calc.exe")
>>>
0 # 调用成功,返回0
8.44.3 os库之环境参数
   8.5第三方库自动安装脚本 -需求:批量安装第三方库需要人工干预,能否自动安装? -自动执行pip逐一根据安装需求安装    
#BatchInstall.py
import os
libs = {"numpy","matplotlib","pillow","sklearn","requests",\
"jieba","beautifulsoup4","wheel","networkx","sympy",\
"pyinstaller","django","flask","werobot","pyqt5",\
"pandas","pyopengl","pypdf2","docopt","pygame"}
try:
for lib in libs:
os.system("pip install " + lib)
print("Successful")
except:
print("Failed Somehow")
|