全国计算机等级考试二级教程全国计算机等级考试二级教程 Python语言程序设计语言程序设计 (2020年版) 知识兔w w w . z h is h it u . c o m 【第【第8章】章】 Python计算生态计算生态 知识兔w w w . z h is h it u . c o m n 基本的Python内置函数 n 了解Python计算生态 考纲考点 知识兔w w w . z h is h it u . c o m 知识导图 知识兔w w w . z h is h it u . c o m 计算思维 知识兔w w w . z h is h it u . c o m n 人类在认识世界、改造世界过程中表现出三种基 本的思维特征:以实验和验证为特征的实证思维, 以物理学科为代表;以推理和演绎为特征的逻辑 思维,以数学学科为代表;以设计和构造为特征 的计算思维,以计算机学科为代表。 n 计算思维的本质是抽象抽象(Abstraction)和自动 化 自动 化(Automation) 计算思维 知识兔w w w . z h is h it u . c o m 程序设计方法论 知识兔w w w . z h is h it u . c o m n 一个解决复杂问题行之有效的方法被称作自顶而 下的设计 自顶而 下的设计方法,其基本思想是以一个总问题开始, 试图把它表达为很多小问题组成的解决方案。再 用同样的技术依次攻破每个小问题,最终问题变 得非常小,以至于可以很容易解决。然后只需把 所有的碎片组合起来,就可以得到一个程序。 程序设计方法论 知识兔w w w . z h is h it u . c o m “体育竞技分析”实例 n 两个球员在一个有四面边界的场地上用球拍击球。开始 比赛时,其中一个球员首先发球。接下来球员交替击球, 直到可以判定得分为止,这个过程称为回合。当一名球 员未能进行一次合法击打时,回合结束。 n 未能打中球的球员输掉这个回合。如果输掉这个回合的 是发球方,那么发球权交给另一方;如果输掉的是接球 方,则仍然由这个回合的发球方继续发球。 n 总之,每回合结束,由赢得该回合的一方发球。球员只 能在他们自己的发球局中得分。首先达到15分的球员赢 得一局比赛。 程序设计方法论 知识兔w w w . z h is h it u . c o m n 自顶向下设计中最重要的是顶层设计。体育竞技 分析从用户处得到模拟参数,最后输出结果。下 面是一个基础设计: •步骤1: 打印程序的介绍性信息; •步骤2:获得程序运行需要的参数:probA, probB, n; •步骤3:利用球员A和B的能力值probA和probB,模拟n 次比赛; •步骤4:输出球员A和B获胜比赛的场次及概率。 自顶向下设计 知识兔w w w . z h is h it u . c o m 自顶向下设计 1 2 def main(): printIntro() 知识兔w w w . z h is h it u . c o m n 步骤2获得用户输入。通过函数将输入语句及 输入格式等细节封装或隐藏,只需要假设程序如 果调用了getInputs()函数即可获取变量probA, probB和n的值。这个函数必须为主程序返回这 些值,截止第2步,全部代码如下。 自顶向下设计 1 2 3 def main(): printIntro() probA, probB, n = getInputs() 知识兔w w w . z h is h it u . c o m n 步骤3需要使用probA、probB模拟n场比赛。 此时,可以采用解决步骤2的类似方法,设计一 个simNGames()函数来模拟n场比赛 自顶向下设计 1 2 3 4 def main(): printIntro() probA, probB, n = getInputs() winsA, winsB = simNGames(n, probA, probB) 知识兔w w w . z h is h it u . c o m n 步骤4输出结果,设计思想类似,仍然只规划 功能和函数,代码如下。 自顶向下设计 1 2 3 4 5 def main(): printIntro() probA, probB, n = getInputs() winsA, winsB = simNGames(n, probA, probB) printSummary(winsA, winsB) 知识兔w w w . z h is h it u . c o m n 原问题被划分为了4个独立的函数:printIntro(), getInputs(),simNGames()和printSummary()。 自顶向下设计 知识兔w w w . z h is h it u . c o m n 每层设计中,参数和返回值如何设计是重点,其 他细节可以暂时忽略。确定事件的重要特征而忽 略其它细节过程称为抽象。抽象是一种基本设计 方法,自顶向下的设计过程可以看作是发现功能 并抽象功能的过程。 自顶向下设计 知识兔w w w . z h is h it u . c o m n printIntro()函数应该输出一个程序介绍,这个功 能的Python代码如下,这个函数由Python基本 表达式组合,不增加或改变程序结构。 自顶向下设计 1 2 3 def printIntro(): print("这个程序模拟两个选手这个程序模拟两个选手A和和B的某种竞技比赛的某种竞技比赛") print("程序运行需要程序运行需要A和和B的能力值(以的能力值(以0到到1之间的小数表示)之间的小数表示)") 知识兔w w w . z h is h it u . c o m n getInputs()函数根据提示得到三个需要返回主程 序的值,代码如下。 自顶向下设计 1 2 3 4 5 def getInputs(): a = eval(input("请输入选手请输入选手A的能力值的能力值(0-1): ")) b = eval(input("请输入选手请输入选手B的能力值的能力值(0-1): ")) n = eval(input("模拟比赛的场次模拟比赛的场次: ")) return a, b, n 知识兔w w w . z h is h it u . c o m n simNGames()函数是整个程序的核心,其基本 思路是模拟n场比赛,并跟踪记录每个球员赢得 了多少比赛。 自顶向下设计 1 2 3 4 5 6 7 8 9 10 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 知识兔w w w . z h is h it u . c o m n 代码中设计了simOneGame()函数,用于模拟一场比赛, 这个函数需要知道每个球员的概率,返回两个球员的最 终得分 自顶向下设计 知识兔w w w . z h is h it u . c o m n 接下来需要实现simOneGame()函数。 n 为了模拟一场比赛,需要根据比赛规则来编写代 码,两个球员A和B持续对攻直至比赛结束。可 以采用无限循环结构直到比赛结束条件成立。同 时,需要跟踪记录比赛得分,保留发球局标记, 自顶向下设计 知识兔w w w . z h is h it u . c o m n 在模拟比赛的循环中,需要考虑单一的发球权和 比分问题,通过随机数和概率,可以确定发球方 是否赢得了比分(random() < prob)。如果球 员A发球,那么需要使用A的概率,接着根据发 球结果,更新球员A得分或是将球权交给球员B。 自顶向下设计 知识兔w w w . z h is h it u . c o m 自顶向下设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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() >> 这个程序模拟两个选手A和B的某种竞技比赛 程序运行需要A和B的能力值(以0到1之间的小数表示) 请输入选手A的能力值(0-1): 0.45 请输入选手B的能力值(0-1): 0.5 模拟比赛的场次: 1000 竞技分析开始,共模拟1000场比赛 选手A获胜371场比赛,占比37.1% 选手B获胜629场比赛,占比62.9% 知识兔w w w . z h is h it u . c o m n 结合体育竞技实例介绍了自顶向下的设计过程。 从问题输入输出确定开始,整体设计逐渐向下进 行。每一层以大体算法描述开始,然后逐步细化 成代码,细节被函数封装 自顶向下设计 知识兔w w w . z h is h it u . c o m 整个过程可以概括为四个步骤: n 步骤1:将算法表达为一系列小问题; n 步骤2:为每个小问题设计接口; n 步骤3:通过将算法表达为接口关联的多个小问 题来细化算法; n 步骤4:为每个小问题重复上述过程。 自顶向下设计 知识兔w w w . z h is h it u . c o m 自底向上执行 知识兔w w w . z h is h it u . c o m n 开展测试的更好办法也是将程序分成小部分逐个 测试 n 执行中等规模程序的最好方法是从结构图最底层 开始,而不是从顶部开始,然后逐步上升。或者 说,先运行和测试每一个基本函数,再测试由基 础函数组成的整体函数,这样有助于定位错误 自底向上执行 知识兔w w w . z h is h it u . c o m n 可以从gameOver()函数开始测试。Python 解释 器提供import 保留字辅助开展单元测试,语法 格式如下: import 自底向上执行 >>>import MatchAnalysis >>>MatchAnalysis.gameOver(15, 10) True >>>MatchAnalysis.gameOver(10, 1) False 知识兔w w w . z h is h it u . c o m n 初步测试说明gameOver()函数是正确的。进一 步测试simOneGame()函数,如下: 自底向上执行 >>>import e151MatchAnalysis >>>e151MatchAnalysis.simOneGame(.45, .5) (9, 15) >>>e151MatchAnalysis.simOneGame(.45, .5) (15, 13) 知识兔w w w . z h is h it u . c o m n 通过继续进行这样的单元测试可以检测程序中的 每个函数。独立检验每个函数更容易发现错误。 通过模块化设计可以分解问题使编写复杂程序成 为可能,通过单元测试方法分解问题使运行和调 试复杂程序成为可能。 n 自顶向下和自底向上自顶向下和自底向上贯穿程序设计和执行的整个 过程。 自底向上执行 知识兔w w w . z h is h it u . c o m 计算生态 知识兔w w w . z h is h it u . c o m n 近20年的开源运动产生了深植于各信息技术领域 的大量可重用资源,直接且有力的支撑了信息技 术超越其他技术领域的发展速度,形成了“计算 生态 计算 生态”。 n Python语言从诞生之初致力于开源开放,建立 了全球最大的编程计算生态。 计算生态 知识兔w w w . z h is h it u . c o m n Python官方网站提供了第三方库索引功能 (PyPI,the Python Package Index),网址如 下: https://pypi.python.org/pypi n 该页面列出了Python语言超过12万个第三方库 的基本信息,这些函数库覆盖信息领域技术所有 技术方向。 计算生态 知识兔w w w . z h is h it u . c o m n 由于Python有非常简单灵活的编程方式,很多 采用C、C++等语言编写的专业库可以经过简单 的接口封装供Python语言程序调用。这样的粘 性功能 粘 性功能使得Python语言成为了各类编程语言之 间的接口,Python语言也被称为“胶水语言胶水语言”。 计算生态 知识兔w w w . z h is h it u . c o m n 有一部分Python计算生态随Python安装包一起 发布,用户可以随时使用,被称为Python标准 库 标准 库。 n 受限于Python安装包的设定大小,标准库数量 270个左右。 Python标准库 知识兔w w w . z h is h it u . c o m n 更广泛的Python计算生态采用额外安装方式服 务用户,被称为Python第三方库。这些第三方 库由全球各行业专家、工程师和爱好者开发,没 有顶层设计,由开发者采用“尽力而为”的方式 维护。Python通过新一代安装工具pip管理大部 分Python第三方库的安装。 Python第三方库 知识兔w w w . z h is h it u . c o m 基本的Python内置函数 知识兔w w w . z h is h it u . c o m n Python解释器提供了68个内置函数(下面介绍32个) 基本的Python内置函数 函数名称函数说明 abs(x) x的绝对值 如果x是复数,返回复数的模 all(x) 组合类型变量x中所有元素都为真时返回True,否则返回False;若 x为空,返回True any(x) 组合类型变量x中任一元素都为真时返回True,否则返回False;若 x为空,返回False bin(x) 将整数x转换为等值的二进制字符串 bin(1010)的结果是0b1111110010 bool(x) 将x转换为Boolean类型,即True或False bool() 的结果是False chr(i) 返回Unicode为i的字符 chr(9996)的结果是✌ complex(r,i) 创建一个复数 r + i*1j,其中i可以省略 complex(10,10)的结果是10+10j dict() 创建字典类型 dict()的结果是一个空字典{} divmod(a,b) 返回a和b的商及余数 divmod(10,3)结果是一个(3,1) 知识兔w w w . z h is h it u . c o m 基本的Python内置函数 函数名称函数说明 eval(s) 计算字符串s作为Python表达式的值 eval(1+99)的结果是100 exec(s) 计算字符串s作为Python语句的值 exec(a = 1+999)运行后,变量a的值为1000 float(x) 将x转换成浮点数 float(1010)的结果是1010.0 hex(x) 将整数转换为16进制字符串 hex(1010)的结果是0 x3f2 input(s) 获取用户输入,其中s是字符串,作为提示信息 s可选 int(x) 将x转换成整数 int(9.9)的结果是9 list(x) 创建或将变量x转换成一个列表类型 list({10,9,8})的结果是[8,9,10] max(a1,a2,…) 返回参数的最大值 max(1,2,3,4,5)的结果是5 min(a1,a2,…) 返回参数的最小值 min(1,2,3,4,5)的结果是1 oct(x) 将整数x转换成等值的八进制字符串形式 oct(1010)的结果是0o1762 open(fname, m) 打开文件,包括文本方式和二进制方式等 其中,m部分可以省略,默认是以文本可读形式打开 知识兔w w w . z h is h it u . c o m 基本的Python内置函数 函数名称函数说明 ord(c) 返回一个字符的Unicode编码值 ord(字)的结果是23383 pow(x,y) 返回x的y次幂 pow(2,pow(2,2))的结果是16 print(x) 打印变量或字符串x print()的end参数用来表示输出的结尾字符 range(a,b,s) 从a到b(不含)以s为步长产生一个序列 list(range(1,10,3))的结果是[1, 4, 7] reversed(r) 返回组合类型r的逆序迭代形式 for i in reversed([1,2,3])将逆序遍历列表 round(n) 四舍五入方式计算n round(10.6)的结果是11 set(x) 将组合数据类型x转换成集合类型 set([1,1,1,1])的结果是{1} sorted(x) 对组合数据类型x进行排序,默认从小到大 sorted([1,3,5,2,4])的结果是[1,2,3,4,5] str(x) 将x转换为等值的字符串类型 str(0 x1010)的结果是4112 sum(x) 对组合数据类型x计算求和结果 sum([1,3,5,2,4])的结果是15 type(x) 返回变量x的数据类型 type({1:2})的结果是 知识兔w w w . z h is h it u . c o m 实例解析:Web页面元素提取 知识兔w w w . z h is h it u . c o m n Web页面,一般是HTML页面,是Internet组织 信息的基础元素。Web页面元素提取是一类常见 问题,在网络爬虫、浏览器等程序中有着不可或 缺的重要作用。 n HTML指超文本标记语言,严格来说,HTML不 是一种编程语言,而是一种对信息的标记语言, 对Web的内容、格式进行描述。 Web页面元素提取 知识兔w w w . z h is h it u . c o m n 自动地从一个链接获取HTML页面是网络爬虫的 功能,本实例功能可以整体分成如下4个步骤: • 步骤1: 读取保存在本地的html文件; • 步骤2:解析并提取其中的图片链接; • 步骤3:输出提取结果到屏幕; • 步骤4:保存提取结果为文件。 Web页面元素提取 知识兔w w w . z h is h it u . c o m n 根据上述步骤,可以写出主程序如下。其中设置 了4个函数getHTMLlines()、extractImageUrls()、 showResults()和saveResults()分别对应上述4个 步骤。 Web页面元素提取 1 2 3 4 5 6 7 def main(): inputfile = nationalgeographic.html outputfile = nationalgeographic-urls.txt htmlLines = getHTMLlines(inputfile) imageUrls = extractImageUrls(htmlLines) showResults(imageUrls) saveResults(outputfile, imageUrls) 知识兔w w w . z h is h it u . c o m n 定义main()函数的目的是为了让代码更加清晰, 作为主程序,也可以不采用函数形式而直接编写。 main()前两行分别制定了拟获取HTML文件的路 径和结果输出路径。 n 主函数设计完成后,逐一编写各函数功能。 Web页面元素提取 知识兔w w w . z h is h it u . c o m n getHTMLlines()函数读取HTML文件并内容, 并将结果转换为一个分行列表,为了兼容不同编 码,建议在open()函数中增加encoding字段,设 置采用UTF-8编码打开文件。代码如下。 Web页面元素提取 1 2 3 4 5 def getHTMLlines(htmlpath): f = open(htmlpath, "r", encoding=utf-8) ls = f.readlines() f.close() return ls 知识兔w w w . z h is h it u . c o m n extractImageUrls()是程序的核心,用于解析文 件并提取图像的URL。观察HTML可以发现,图 像采用img标签表示,例如: Web页面元素提取 知识兔w w w . z h is h it u . c o m n 其中,>> 第 0个URL: 第 1个URL: 第 2个URL: 第 3个URL: 第 4个URL: 第 5个URL: 第 6个URL: 第 7个URL: 第 8个URL: 第 9个URL: 第10个URL: (此后略去40个输出) 知识兔w w w . z h is h it u . c o m 本章小结 本章主要讲解程序设计方法学,包括计算思维、自 顶向下设计和自底向上执行等,进一步本章介绍了计算 生态的概念及Python标准库和第三方库的划分。通过 Web页面元素提取的实例帮助读者理解自顶向下设计的 基本方法。 从最基本的IPO到自顶向下设计,是否感受到了函数 式编程的优势? 知识兔w w w . z h is h it u . c o m

展开阅读全文

python递归算法案例教案_电子教案 第8章 Python计算生态相关推荐

  1. python实用案例讲解_精心整理!9个 Python 实用案例分享

    1. 整理字符串输入 整理用户输入的问题在编程过程中极为常见.通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作.但是如果问题很复杂,可能有更好的方法来解 ...

  2. python 字典排序成绩_集体备课第四章 python基础与顺序结构

    第四章   第一节 python基础 填写上机记录:日期:9.28 班级:  节次:5     内容:python基础 下课时,整理好座椅后,再离开. 1.数据类型: 数字(整数(int).float ...

  3. 《利用Python进行数据分析·第2版》第13章 Python建模库介绍

    第1章 准备工作 第2章 Python语法基础,IPython和Jupyter 第3章 Python的数据结构.函数和文件 第4章 NumPy基础:数组和矢量计算 第5章 pandas入门 第6章 数 ...

  4. python递归算法案例教案_Python电子教案2-1-Python程序实例解析.ppt

    Python电子教案2-1-Python程序实例解析.ppt 简单说,eval()的作用是将输入的字符串内容变成Python语句,并执行这个语句.实例代码1.1使用eval()函数将用户的部分输入(T ...

  5. python递归算法案例教案_python教案

    第五单元 进阶程序设计(总 10 课时) 第一节 选择编程语言( 1 课时) 一.教学目标 1 .了解程序设计语言和两种翻译方式: 2 .了解 Python 背景.功能.安装,熟悉 Python 编程 ...

  6. 二维分类教案_大班教案二维分类

    准备材料:1.三级分类组合板一套.2.压膜图形一套:大小不等.颜色不一的圆形.正方形.长方形.梯形.六边形.三角形.3.标记卡:颜色标记(红色.非红色)各一张,图形标记(圆形.非圆形)各两张.4.装图 ...

  7. 计算机画大熊猫教案,信息技术电子教案画大熊猫.doc

    信息技术电子教案画大熊猫 二 画大熊猫 教材分析: 本课为冀教版信息技术课本第二课内容,初学画图工具,本课主要介绍图形图画的加工处理方法,通过用"画图"软件画大熊猫的活动,让学生感 ...

  8. python免费训练营教程_鹅厂大牛亲授Python零基础寒假训练营视频教程

    目录:/093 鹅厂大牛亲授python零基础寒假训练营 $ U  t  E; k6 g, M- t┣━━(补充章节)  第八章第2节-集合序列操作,遍历及推导式.mp4 . l2 A: f8 {2 ...

  9. 21天python百度网盘_《21天学通Python》PDF 高清版百度网盘下载

    提取码:gr0z 内容简介  · · · · · · <21天学通Python>全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Pytho ...

最新文章

  1. Android通用简洁的下载器
  2. 多台服务器搭建Spark集群
  3. java中final关键字的用法
  4. tensorflow就该这么学--4(识别手写数字)
  5. C#深入解析Json格式内容
  6. mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
  7. 王译潇20162314 第九周作业总结
  8. MySQL Operators(比较操作符,逻辑运算符)
  9. 新 CEO 谈论GitHub 被微软接管后的未来
  10. 四年测试工程师经历,下一步转开发还是继续测试?
  11. 如何检查Django版本
  12. STL--vector、pair
  13. 使用鸿蒙原生做游戏适配问题
  14. 使用浏览器检查工具下载网页视频
  15. 论文笔记:You Only Look Once: Unified, Real-Time Object Detection(yolo v1)
  16. Flutter 3.0 极光推送
  17. MMKV:微信团队开源的轻量级存储方案
  18. 【转】最实用的IT类网站及工具大集合
  19. 电脑开机不显示系统,直接进入bios
  20. Ant design pro简单使用

热门文章

  1. 心法禅意:程序猿的参悟、觉悟、证悟之路
  2. 蓝牙之十六-测试认证
  3. Java实现语音播报
  4. docker 操作记录-1
  5. AI-人工智能初识,跟上时代的步伐也要走在未来的路上
  6. offsetwidth111
  7. Android 10深色主题适配踩坑记录
  8. VoIP - hairpinning - 发夹
  9. 信号与系统基本信号的概念及运算
  10. WinRAR制作有密码的自解压文件