分享

第八章 Python计算生态

 流形sbz 2023-10-18 发布于甘肃

文章目录

    • 第八章 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:///

该页面列出来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 requests

num = 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&copyright=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
一、选择题
  1. 以下代码的运行结果为:______

    counter = 1
    
    
    def doLotsOfStuff():
        global counter
        for i in (1, 2, 3):
            counter += 1
    
    
    doLotsOfStuff()
    print(counter)
    

    A 4 B 5 C 1 D 代码错误

    正确答案:A

  2. 在程序设计范畴,计算思维不包含以下哪一项?

    A 理解问题的计算特性

    B 将计算特性抽象为计算问题

    C 通过程序设计语言实现问题的自动求解

    D 以推理和演绎为特征的逻辑思维

    正确答案:D

  3. 以下选项中分别表示程序设计和执行方式的是:______

    A 通过总结与归纳,推测事件的发展走向

    B 通过分析与推理,找到语言逻辑中的漏洞

    C 通过程序解决一个计算复杂的问题

    D 通过逻辑推理,分析悬疑小说中的谜底

    正确答案:C

  4. 以下选项中分别表示程序设计和执行方式的是:______

    A 自顶向下;自底向上

    B 自底向上;自顶向下

    C 自顶向下;自顶向下

    D 自底向上;自底向上

    正确答案:A

  5. 一下不是自顶向下设计方式步骤的是:______
    A 将算法表达为一系列小问题

    B 通过单元测试方法分解问题来运行和调试程序

    C 通过将算法表达为借口关联的多个小问题来细化算法

    D 为每个小问题设计程序接口

    正确答案:B

  6. 关于测试一个中等规模程序的说法,以下错误的是:______

    A 从结构图最底层开始,逐步上升

    B 先运行和测试每一个基础函数,在测试由基础函数组成的整体函数

    C 直接运行程序

    D 采用自底向上的执行方式

    正确答案:C

  7. 以下选项中最能体现计算机中算法含义的是:______
    A 数学的计算公式

    B 程序设计语言的语句序列

    C 对问题的精确描述

    D 解决问题的精确步骤

    正确答案:D

  8. 以下不属于Python标准库的是:______

    A time B random C networkx D optparse

    正确答案:C

  9. 以下选项中是Python第三方库的是:______

    A turtle B Pyinstaller C random D math

    正确答案:B

  10. 以下选项中不是Python内置函数的是:______

    A hex() B all() C char() D sorted()

    正确答案:C

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多