程序设计方法学
一、实例13:体育竞技分析
1.自顶向下和自底向上
①自顶向下:将一个总问题表达为若干个小问题组成的形式,使用同样方法进一步分解小问题,直至小问题可以用计算机简单明了的解决
②自底向上:分单元测试,逐步组建复杂系统,并且能够进行有效测试的方法
2.体育竞技分析实例
①程序总体框架和步骤
- 步骤1:打印程序的介绍性信息式(printInfo())
- 步骤2:获得程序运行参数proA,proB,n(getInputs())
- 步骤3:利用球员A和B的能力值,模拟n局比赛(simNGames())
- 步骤4:输出球员A和球员B获胜比赛的场次及概率(printSummary())
#MatchAnalysis.py
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()
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1): 0.45
请输入选手B的能力值(0-1): 0.55
模拟比赛的场次: 1000
竞技分析开始,共模拟1000场比赛
选手A获胜232场比赛,占比23.2%
选手B获胜768场比赛,占比76.8%
二、Python程序设计思维
1.计算思维与程序设计
①人类思维特征
- 逻辑思维:推理和演绎,数学为代表
- 实证思维:实验和验证,物理为代表
- 计算思维:设计和构造,计算机为代表
②计算机思维的特点:抽象和自动化
-计算思维:Computational Thinking
-抽象问题的计算过程,利用计算机自动化求解
—计算思维基于计算机强大的算力以及海量数据
—抽象计算过程,关注设计和构造,而非因果
-计算思维是基于计算机的思维方式
2.计算生态与Python语言
①计算生态:没有顶层设计、以功能为单位
- 竞争发展
- 相互依存
- 迅速更迭
3.用户体验与软件产品
①提高用户体验的方法
-进度展示
-异常处理(用户输入、读写文件、输出)
-其他(打印输出、日志文件、帮助信息)
4.基本的程序设计模式
①模块化设计(紧耦合,松耦合)
②配置化设计(程序引擎+配置文件)
三、Python第三方库的安装
1.Python社区
https://pypi.org/ #Python package index
2.安装第三方库
①使用pip指令(主要)
- pip install <第三方库>
- pip install -u <第三方库>:更新已安装的指定第三方库
- pip uninstall <第三方库>:卸载指定第三方库
- pip download <第三方库>
- pip show <第三方库>:列出指定第三方库的详情信息
- pip search <关键词>:通过关键词搜索第三方库
②集成安装方法
-
Anaconda,支持近800个第三方库,适合数据计算领域开发
https://www.continuum.io
③文件安装方法
-
UCI页面
http://www.lfd.uci.edu/~gohlke/pythonlibs/
四、模块7:OS库的基本使用
1.OS库
os库提供通用的、基本的操作系统交互功能
-路径操作:os.path子库,处理文件路径及信息
-进程管理:启动系统中其他程序
-环境参数:获得系统硬件信息等环境参数
2.OS库的路径操作(os.path)
import os.path 或者 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,*path):组合path与paths,返回一个路径字符串
- os.path.exists(path):判断path对应文件或目录是否存在
- os.path.isfile(path):判断path所对应是否为已存在的文件
- os.path.isdir(path):判断path所对应是否为已存在的目录
- os.path.getatime(path):返回path对应文件或目录上一次的访问时间
- os.path.getmtime(path):返回path对应文件或目录最近一次的修改时间
- os.path.getctime(path):返回path对应文件或目录的创建时间
- os.path.getsize(path):返回path对应文件的大小,字节
3.OS库的进程管理
os.system执行程序或命令,在windows系统中,返回值为cmd的调用返回信息
#调出计算器
>>> import os
>>> os.system("c:\\windows\\System32\\calc.exe")
0 #正确运行,返回0
- os.chdir(path):修改当前程序操作的路径
- os.getcwd():返回程序的当前路径
- os.getlogin():获得当前系统登录用户名称
- os.cpu_count():获得当前系统的CPU数量
- os.urandom(n):获得n个字节长度的随机字符串,通常用于加解密运算
五、实例14:第三方库的自动安装脚本
-jiebaa:中文分词库
-Beautiful Soup:HTML和XML解析器
-Wheel:Python第三方库打包工具
-PyInstaller:打包Python源文件为可执行文件
-Django:Python最流行的Web开发框架
-Flask:轻量级Web开发框架
-WeRoBot:微信机器人开发框架
-SymPy:数学符号计算工具
-Pandas:高校数据分析和计算工具
-Networksx:复杂网络和图结构的建模和分析
-PyQt5:基于Qt的专业级GUI开发框架
-PyOpenGL:多平台OpenGL开发接口
-PyPDF2:PDF文件内容提取及处理
-docopt:Python命令行解析
-PyGame:简单小游戏开发框架
#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("pip3 install "+lib)
print("Successful")
except:
print("Failed Somehow")