文章目录
- 第八章 Python计算生态
- 8.1 计算思维
- 8.2 程序设计方法论
- 8.2.1 自顶向下设计
- 8.2.2 自底向上执行
- 8.3 计算生态
- 8.3.1 Python标准库
- 8.3.2 Python第三方库
- 8.4 基本的Python内置函数
- 8.5 实例解析——Web页面元素提取
- 习题8
- 一、选择题
第八章 Python计算生态
8.1 计算思维
计算思维是人类科学思维活动的重要组成部分。人类在认识世界、改造世界的过程中表现出三种基本的思维特征:以实验和验证为特征的实证思维,以物理学科为代表;以推理和演绎为特征的逻辑思维,以数学学科为代表;以设计和构造为特征的计算思维,以计算机学科为代表。
计算思维的本质是抽象(Abstraction)和自动化(Automation)。
8.2 程序设计方法论
一个解决复杂问题行之有效的方法被称作自顶而下的设计方法,其基本思想是从一个总问题开始,试图把他分解为很多小问题组成的解决方案。再用同样的方法依次攻破每个小问题,最终问题变得非常小,以至于可以很容易解决。然后只需要把所有的碎片组合起来,就可以得到一个程序。
8.2.1 自顶向下设计
自顶向下设计中最重要的是顶层设计。
自顶向下的设计过程可以概括为四个步骤:
步骤1:将算法表达为一系列小问题。
步骤2:为每个小问题设计接口。
步骤3:通过将算法表达为接口关联的多个小问题来细化算法。
步骤4:为每个小问题重复上述过程。
8.2.2 自底向上执行
程序编写后,需要经过测试过程。对于较小规模的程序,直接运行即可。但对于稍大规模的程序,需要特殊方法应对测试问题。就像自顶向下设计,每次只设计程序的一部分比一下子解决整个问题更容易,开展测试的更好办法也是将程序分为小部分逐个测试。
执行中等规模程序的最好方法是从结构图最底层开始,而不是从顶部开始,然后逐步上升。或者说,先运行和测试每一个基础函数,再测试由基础函数组成的整体函数,这样有助于定位错误。
通过继续进行这样的单元测试可以检测程序中的每个函数。独立检验每个函数更容易发现错误。通过模块化设计可以分解问题使编写复杂程序成为可能,通过单元测试方法分解问题试运行和调试复杂程序成为可能。
自顶向下和自底向上贯穿程序设计和执行的整个过程。
8.3 计算生态
近20年的开源运动产生了深植于各信息技术领域的大量可重用资源,直接且有力的支撑了信息技术超越其他技术领域的发展速度,形成了“计算生态”。
Python语言从诞生之初致力于开源开放,建立了全球最大的编程计算生态。
Python官方网站提供了第三方库索引功能(PyPI,the Python Package Index),网址如下:https://pypi.org/
该页面列出来Python语言超过12万个第三方库的基本信息,这些函数库覆盖信息领域技术所有技术方向。
由于Python有非常简单灵活的编程方式,很多采用C、C++等语言编写的专业库可以经过简单的接口封装供Python语言程序调用。这样的粘性功能使得Python语言成为了各类编程语言之间的接口,Python语言也被称为“胶水语言”。
8.3.1 Python标准库
有一部分Python计算生态随Python安装包一起发布,用户可以随时使用,被称为Python标准库。受限于Python安装包的设定大小,标准库数量270个左右。
8.3.2 Python第三方库
更广泛的Python计算生态采用额外安装方式服务用户,被称为Python第三方库。这些第三方库由全球各行业专家、工程师和爱好者开发,没有顶层设计,有开发者采用“尽力而为”的方式维护。Python通过新一代安装工具pip管理大部分Python第三方库的安装。
8.4 基本的Python内置函数
Python解释器提供了68个内置函数,这些函数不需要被引用库而直接使用。这里介绍其中的32个,如表所示。
函数名称 | 函数说明 |
---|---|
abs(x) | x的绝对值。如果x是复数,返回复数的模 |
all(x) | 组合类型变量x中所有元素都为真时返回True,否则返回False;若x为空,返回True |
any(x) | 组合类型变量x中任一元素都为真时返回True,否则返回False;若x为空,返回True |
bin(x) | 将整数x转换为等值的二进制字符串 |
bool(x) | 将x转换为Boolean类型,即True或False |
chr(i) | 返回Unicode为i的字符 |
complex(r,i) | 创建一个负数r + i * 1j,其中i可以省略 |
dict() | 创建字典类型 |
divmod(a,b) | 返回a和b的商和余数 |
eval(s) | 计算字符串s作为Python表达式的值 |
exec(s) | 计算字符串s作为Python语句的值 |
float(x) | 将x转换成浮点数 |
hex(x) | 将整数转换为十六进制字符串 |
input(s) | 获取用户输入,其中s是字符串,作为提示信息。s可选 |
int(x) | 将x转换成整数 |
len(x) | 计算变量x的长度 |
list(x) | 创建或将变量x转换成列表类型 |
max(a1,a2,……) | 返回参数的最大值 |
min(a1,a2,……) | 返回参数的最小值 |
oct(x) | 将整数x转换成等值的八进制字符串形式 |
open(fname,m) | 打开文件,包括文本方式和二进制方式等 |
ord© | 返回一个字符的Unicode编码值 |
pow(x,y) | 返回x的y次幂 |
print(x) | 打印变量或字符串x |
range(a,b,s) | 从a到b(不含)以s为步长产生一个序列 |
reversed® | 返回组合类型r的逆序迭代形式 |
round(n) | 四舍五入方式计算n |
set(x) | 将组合数据类型x转换成集合类型 |
sorted(x) | 对组合数据类型x进行排序,默认从大到小 |
str(x) | 将x转换为等值的字符串类型 |
sum(x) | 对组合数据类型x计算求和结果 |
type(x) | 返回变量x的数据类型 |
8.5 实例解析——Web页面元素提取
Web页面,一般是HTML页面,是Internet组织信息的基础元素。Web页面元素提取是一类常见问题,在网络爬虫、浏览器等程序中有着不可或缺的重要作用。
HTML指超文本标记语言,严格来说,HTML不是一种编程语言,而是一种新型的标记语言,对Web的内容、格式信息描述。
import re
import requestsnum = 0 # 给图片名字加数字
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)','Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9'
}
# 图片页面的url
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1685684057373_R&pv=&ic=0&nc=1&z=0&hd=0&latest=0©right=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&dyTabStr=&ie=utf-8&sid=&word=%E9%BB%91%E5%AE%A2'
html = requests.get(url, headers=header) # 通过requests库请求到了页面
html.encoding = 'utf8' # 防止乱码
html = html.text
res = re.findall('"objURL":"(.*?)"', html) # 正则表达式,筛选出html页面中符合条件的图片源代码地址url
for i in res:num = num + 1 # 重命名,防止重复picture = requests.get(i) # 得到每一张图片的大图file_name = 'C:\\Users\\Administrator\\Desktop\\图片\\' + str(num) + ".jpg" # 重命名file = open(file_name, "wb") # 以二进制写入的方式打开图片file.write(picture.content) # 下载图片至本文件夹print(i) # 查看图片连接file.close() # 结束文件操作
习题8
一、选择题
-
以下代码的运行结果为:______
counter = 1def doLotsOfStuff():global counterfor i in (1, 2, 3):counter += 1doLotsOfStuff() print(counter)
A 4 B 5 C 1 D 代码错误
正确答案:A
-
在程序设计范畴,计算思维不包含以下哪一项?
A 理解问题的计算特性
B 将计算特性抽象为计算问题
C 通过程序设计语言实现问题的自动求解
D 以推理和演绎为特征的逻辑思维
正确答案:D
-
以下选项中分别表示程序设计和执行方式的是:______
A 通过总结与归纳,推测事件的发展走向
B 通过分析与推理,找到语言逻辑中的漏洞
C 通过程序解决一个计算复杂的问题
D 通过逻辑推理,分析悬疑小说中的谜底
正确答案:C
-
以下选项中分别表示程序设计和执行方式的是:______
A 自顶向下;自底向上
B 自底向上;自顶向下
C 自顶向下;自顶向下
D 自底向上;自底向上
正确答案:A
-
一下不是自顶向下设计方式步骤的是:______
A 将算法表达为一系列小问题B 通过单元测试方法分解问题来运行和调试程序
C 通过将算法表达为借口关联的多个小问题来细化算法
D 为每个小问题设计程序接口
正确答案:B
-
关于测试一个中等规模程序的说法,以下错误的是:______
A 从结构图最底层开始,逐步上升
B 先运行和测试每一个基础函数,在测试由基础函数组成的整体函数
C 直接运行程序
D 采用自底向上的执行方式
正确答案:C
-
以下选项中最能体现计算机中算法含义的是:______
A 数学的计算公式B 程序设计语言的语句序列
C 对问题的精确描述
D 解决问题的精确步骤
正确答案:D
-
以下不属于Python标准库的是:______
A time B random C networkx D optparse
正确答案:C
-
以下选项中是Python第三方库的是:______
A turtle B Pyinstaller C random D math
正确答案:B
-
以下选项中不是Python内置函数的是:______
A hex() B all() C char() D sorted()
正确答案:C