【第8周笔记】程序设计方法学

2022-05-03
2022-05-03
6 min read
Hits

  课程笔记

问题分析

  体育竞技分析:模拟N场比赛

  计算思维:抽象 + 自动化

  模拟:抽象比赛过程 + 自动化执行N场比赛

  当 N 越大时,比赛结果分析会越科学

自顶向下(设计)

  将一个总问题表达为若干个小问题组成的形式

  使用同样方法进一步分解小问题

  直至,小问题可以用计算机简单明了的解决

自底向上(执行)

  逐步组建复杂系统的有效测试方法

  分单元测试,逐步组装

  按照自顶向下相反的路径操作

  直至,系统各部分以组装的思路都经过测试和验证

举一反三

  理解自顶向下和自底向上

  理解自顶向下的设计思维:分而治之

  理解自底向上的执行思维:模块化集成

  自顶向下是“系统”思维的简化

计算思维

  第3种人类思维特征

  逻辑思维:推理和演绎,数学为代表,A->B B->C A->C

  实证思维:实验和验证,物理为代表,引力波<-实验

  计算思维:设计和构造,计算机为代表,汉诺塔递归

  抽象和自动化

  计算思维:Computational Thinking

  抽象问题的计算过程,利用计算机自动化求解

  计算思维是基于计算机的思维方式

  抽象问题的计算过程,利用计算机自动化求解

  计算思维基于计算机强大的算力及海量数据

  抽象计算过程,关注设计和构造,而非因果

  以计算机程序设计为实现的主要手段

用户体验

  实现功能 -> 关注体验

  用户体验指用户对产品建立的主观感受和认识

  关心功能实现,更要关心用户体验,才能做出好产品

  编程只是手段,不是目的,程序最终为人类服务

提高用户体验的方法

  1. 进度展示
    • 如果程序需要计算时间,可能产生等待,请增加进度展示
    • 如果程序有若干步骤,需要提示用户,请增加进度展示
    • 如果程序可能存在大量次数的循环,请增加进度展示
  2. 异常处理
    • 当获得用户输入,对合规性需要检查,需要异常处理
    • 当读写文件时,对结果进行判断,需要异常处理
    • 当进行输入输出时,对运算结果进行判断,需要异常处理
  3. 其他类方法
    • 打印输出:特定位置,输出程序运行的过程信息
    • 日志文件:对程序异常及用户使用进行定期记录
    • 帮助信息:给用户多种方式提供帮助信息

  软件程序 -> 软件产品

用户体验是程序到产品的关键环节

基本的程序设计模式

  1. 从 IPO 开始
    1. I:Input 输入,程序的输入
    2. P:Process 处理,程序的主要逻辑
    3. O:Output 输出,程序的输出
    4. 确定IPO:明确计算部分及功能边界
    5. 编写程序:将计算求解的设计变成现实
    6. 调试程序:确保程序按照正确逻辑能够正确运行
  2. 自顶向下设计
  3. 模块化设计
    • 通过函数或对象封装将程序划分为模块及模块间的表达
    • 具体包括:主程序、子程序和子程序间关系
    • 分而治之:一种分而治之、分层抽象、体系化的设计思想
    • 紧耦合:两个部分之间交流很多,无法独立存在
    • 松耦合:两个部分之间交流较少,可以独立存在
    • 模块内部紧耦合、模块之间松耦合
  4. 配置化设计
    • 引擎 + 配置:程序执行和配置分离,将可选参数配置化
    • 将程序开发变成配置文件编写,扩展功能而不修改程序
    • 关键在于接口设计,清晰明了、灵活可扩展

应用开发的四个步骤

  从应用需求到软件产品

  1. 产品定义:对应用需求充分理解和明确定义
    • 产品定义,而不仅是功能定义,要考虑商业模式
  2. 系统架构:以系统方式思考产品的技术实现
    • 系统架构,关注数据流、模块化、体系架构
  3. 设计与实现:结合架构完成关键设计及系统实现
    • 结合可扩展性、灵活性等进行设计优化
  4. 用户体验:从用户角度思考应用效果
    • 用户至上,体验优先,以用户为中心

Python 社区

13万个第三方库:Python 社区

PyPI: Python Package Index

PSF 维护的展示全球 Python 计算生态的主站

学会检索并利用 PyPI,找到合适的第三方库开发程序

实例:开发与区块链相关的程序

  1. 在 pypi.org 搜索 blockchain
  2. 挑选适合开发目标的第三方库作为基础
  3. 完成自己需要的功能

安装 Python 第三方库

  三种方法

  1. 使用 pip 命令(主要方法)
  2. 集成安装方法
  3. 文件安装方法

  常用的 pip 命令

pip install <第三方库名>     # 安装指定的第三方库
pip install –U <第三方库名>     # 使用 -U 标签更新已安装的指定第三方库
pip uninstall <第三方库名>     # 卸载指定的第三方库
pip download <第三方库名>     # 下载但不安装指定的第三方库
pip show <第三方库名>     # 列出某个指定第三方库的详细信息
pip search <关键词>     # 根据关键词在名称和介绍中搜索第三方库
pip search blockchain     # 搜索 blockchain 相关库
pip list     # 列出当前系统已经安装的第三方库

  集成安装方法

  集成安装:结合特定 Python 开发工具的批量安装

Anaconda

  • 支持近800个第三方库
  • 包含多个主流工具
  • 适合数据计算领域开发

  文件安装方法

  为什么有些第三方库用pip可以下载,但无法安装?

  • 某些第三方库 pip 下载后,需要编译再安装
  • 如果操作系统没有编译环境,则能下载但不能安装
  • 可以直接下载编译后的版本用于安装吗?

  实例:安装 wordcloud 库

  1. 在 UCI 页面上搜索 wordcloud
  2. 下载对应版本的文件
  3. 使用 pip install <文件名> 安装

os 库基本介绍

  os 库是 Python 标准库,包含几百个函数

  常用路径操作、进程管理、环境参数等几类

  路径操作:os.path 子库,处理文件路径及信息

  进程管理:启动系统中其他程序

  环境参数:获得系统软硬件信息等环境参数

路径操作

os.path 子库以 path 为入口,用于操作和处理文件路径

import os.path
# 或
import os.path as op
函数描述
os.path.abspath(path)返回 path 在当前系统中的绝对路径
os.path.normpath(path)归一化 path 的表示形式,统一用 \ 分隔路径
os.path.relpath(path)返回当前程序与文件之间的相对路径(relative path)
os.path.dirname(path)返回 path 中的目录名称
os.path.basename(path)返回 path 中最后的文件名称
os.path.join(path, *paths)组合 path 与 paths,返回一个路径字符串
os.path.exists(path)判断 path 对应文件或目录是否存在,返回 True 或 False
os.path.isfile(path)判断 path 所对应是否为已存在的文件,返回 True 或 False
os.path.isdir(path)判断 path 所对应是否为已存在的目录,返回 True 或 False
os.path.getatime(path)返回 path 对应文件或目录上一次的访问时间
os.path.getmtime(path)返回 path 对应文件或目录最近一次的修改时间
os.path.getctime(path)返回 path 对应文件或目录的创建时间
os.path.getsize(path)返回 path 对应文件的大小,以字节为单位
举例输出
os.path.abspath(“file.txt”)‘C:\Users\Tian Song\Python36-32\file.txt’
os.path.normpath(“D://PYE//file.txt”)‘D:\PYE\file.txt’
os.path.relpath(“C://PYE//file.txt”)‘..\..\..\..\..\..\..\PYE\file.txt’
os.path.dirname(“D://PYE//file.txt”)‘D://PYE’
os.path.basename(“D://PYE//file.txt”)‘file.txt’
os.path.join(“D:/”, “PYE/file.txt”)‘D:/PYE/file.txt’
os.path.exists(“D://PYE//file.txt”)False
os.path.isfile(“D://PYE//file.txt”)True
os.path.isdir(“D://PYE//file.txt”)Fals
os.path.getatime(“D:/PYE/file.txt”)1518356633.7551725
os.path.getmtime(“D:/PYE/file.txt”)1518356633.7551725
time.ctime(os.path.getctime(“D:/PYE/file.txt”))‘Sun Feb 11 21:43:53 2018’
os.path.getsize(“D:/PYE/file.txt”)180768

进程管理

os.system(command)

  1. 执行程序或命令 command
  2. 在 Windows 系统中,返回值为 cmd 的调用返回信息
import os
os.system("C:\\Windows\\System32\\calc.exe")     # 调出系统计算器
os.system("C:\\Windows\\System32\\mspaint.exe \D:\\PYECourse\\grwordcloud.png")     # 调出画图应用并在画图应用内打开 grwordcloud.png 图片

环境参数

函数描述举例输出
os.chdir(path)修改当前程序操作的路径os.chdir(“D:”)
os.getcwd()返回程序的当前路径os.getcwd()‘D:\’
os.getlogin()获得当前系统登录用户名称os.getlogin()‘Tian Song’
os.cpu_count()获得当前系统的 CPU 数量os.cpu_count()8
os.urandom(n)获得 n 个字节长度的随机字符串,通常用于加解密运算os.urandom(10)b'7\xbe\xf2!\xc1=\x01gL\xb3'

第三方库自动安装脚本

库名用途pip 安装指令
Jieba中文分词pip install jieba
BeautifulSoup HTML 和 XML 解析器pip install beautifulsoup4
WheelPython 第三方库文件打包工具pip install wheel
PyInstaller打包 Python 源文件为可执行文件pip install pyinstaller
DjangoPython 最流行的 Web 开发框架pip install django
Flask轻量级 Web 开发框架pip install flask
WeRoBot微信机器人开发框架pip install werobot
SymPy数学符号计算工具pip install sympy
Pandas高效数据分析和计算pip install pandas
Networkx复杂网络和图结构的建模和分析pip install networkx
PyQt5基于 Qt 的专业级 GUI 开发框架pip install pyqt5
PyOpenGL多平台 OpenGL 开发接口pip install pyopengl
PyPDF2PDF 文件内容提取及处理pip install pypdf2
docoptPython 命令行解析pip install docopt
PyGame简单小游戏开发框架pip install 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("pip install " + lib)
    print("Successful") 
except:
    print("Failed Somehow")