第八章 Python计算生态

news/2024/11/23 23:06:50/

文章目录

    • 第八章 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&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 = 1def doLotsOfStuff():global counterfor i in (1, 2, 3):counter += 1doLotsOfStuff()
    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


http://www.ppmy.cn/news/165471.html

相关文章

前端JS在循环语句中调用API并保证循环语句外同函数作用域的代码同步执行

一、前言 在开发中,可能难免会遇到需要将某个数组遍历获取指定字段的值,然后用此值作为参数来调用API的场景。那么,JS如何在循环语句中调用API并且保证同函数作用域中的其他代码同步执行,并且能使用循环语句中多次调用API请求到的…

(2022,DynamicD)使用动态鉴别器改进 GAN

Improving GANs with A Dynamic Discriminator 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 基础 3.2 动态鉴别器 3.3 针对不同数据体系的两种方案 4. 实验 4.1 设置 4.2 实证研究 4.3 与现有方法的比较 4.4 DynamicD 的泛化性和兼…

「科普向」SaaS 是什么?

简介 在当今数字化时代,软件即服务(Software as a Service,简称SaaS)成为企业和个人在云计算领域中的一种常见选择。SaaS是一种软件交付模式,用户通过互联网访问和使用云端的软件应用,而不必购买、安装和维…

趣谈代码中的注释

代码注释应该算是最具争议的话题之一了。每当程序员们讨论这个话题,可谓是公有公理,婆有婆理。 该不该写注释 四位不同风格的程序员进行了一场辩论,他们分别是唐僧、悟空、八戒、沙僧。 唐僧:自项目成立三年以来,我…

5236. 美化数组的最少删除数

给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 : nums.length 为偶数 对所有满足 i % 2 0 的下标 i ,nums[i] ! nums[i 1] 均成立 注意,空数组同样认为是美丽数组。 你…

致态TiPro7000固件Firmware更新+升级软件(英韧IG5236主控)

致态对TiPro7000的固件(Firmware)进行了多次优化。版本从3.2.F.3C更到ZTA32F3Y,又更新到ZT32F46,再更新到ZT32F66。 1、安装SSD至个人电脑(Windows系统盘或数据盘)。 2、下载RMATool_V11.rar,…

1N5236BTR稳压二极管

产品型号:1N5236BTR   商品目录:稳压二极管   精度:5%   稳压值(典型值):7.5V   反向漏电流:3uA6V   最大功率:500mW 产品展示: 绝对最大额定参数:   超过绝…

HDU5236(概率DP,贪心)

题意是敲n个字符&#xff0c;每次敲有p概率崩溃返回上一次的保存状态&#xff0c;保存需要按下x个建。求最小的按键次数的期望。 求出敲n个字母的期望后枚举分成i段&#xff0c;要使得尽量均匀。 #include <bits/stdc.h> using namespace std; #define maxn 111111 #def…