本节的主要内容包括:
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()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
使用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")