趣味编程挑战:从Python入门到AI应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-08 23:49:25

点击下载

作者:孙勇,林菲

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

趣味编程挑战:从Python入门到AI应用

趣味编程挑战:从Python入门到AI应用试读:

前言

五岁时,父亲从北京出差归来,带给我了一个神奇的礼物——九连环,在父亲和使用说明书的协助下,我很快就学会了玩法,自此玩九连环成为我喜爱的一项消遣活动,并痴迷于不断地提高解锁的速度。依稀记得,那段时间双手好像总是沾满了九连环上褪下的颜色。

后来我逐渐发展出来一种能力——在脑海里解九连环,并模拟因果关系链:“想要拿下第三个环,就一定要上第二个环……”这是一个严守法则的系统,而其法则又是完全可以理解的,这一发现让我惊喜莫名。

当然,真正明白九连环是怎么回事是在若干年以后了。现在回想,虽然九连环从未出现在我的课堂上,但它一手造就了我对“逻辑”的理解,也很可能就是我在高考时坚定地选择计算机专业的底层原因之一。九连环对我在逻辑方面的教育胜过任何课程:一件事情,如果你能把它融会贯通到自己的思维方式中,那它就会变得异常简单;如果不能,那它就比登天还难。从这个角度看,为了更好地建立逻辑思维,是不是应该给每个孩子一个九连环?我曾经爱上了九连环,但这不能简化为一个“认知”问题,这只是我在特定环境下的个人经历,不能假想在每个孩子身上以完全一样的形式重复,但九连环所不能完成的,编程也许可以。

编程就是“学习界”里的海神普罗透斯,其本质在于它的普遍性和模拟能力。因为它可以变成很多种形式,实现很多种功能,所以它可以满足很多种需求。

编程不仅能帮助我们学习,还能帮助我们学会怎么学习,能够把学习变得更加人性化,因为它能在学习者和知识海洋之间建立一种更人性化、更紧密的连接。在即将来临的智能社会里,编程绝不仅仅是一个技能,它对我们的心智也必将带来根本和深远的影响。

Python是一种通用型编程语言,它具有良好的可扩展性和适应性,易于学习,被广泛应用于大数据处理、人工智能、科学运算、金融量化投资等众多领域。无论是客户端、云端,还是物联网终端,都能看到Python的身影,可以说,Python的应用无处不在。特别是在移动互联网和人工智能时代,Python越来越受到程序员的青睐,成为近年来热度增长最快的编程语言之一。在TIOBE、RedMonk等世界编程语言排行榜中,Python均名列前茅。因此,将Python作为编程入门语言是一个非常不错的选择。

本书特色

• 基于Python新版本,适合零基础的初学者。

• 采用单元形式编排内容,由浅入深、循序渐进,通过趣味案例激发学生的学习兴趣。

• 以解决问题为导向,注重计算思维的培养,突出编程能力的重要性。同时,讲解编程知识以“够用”为原则,带领初学者避开技术陷阱。

• 教学案例丰富,涉及数学计算、绘画、游戏设计和人工智能应用等,让学生体验编程的乐趣。

• 精心设计课后练习题,让初学者巩固所学知识。

本书内容脉络

本书共分为上、中、下三篇。

上篇是Python入门,讲授Python程序设计的基础知识。首先从变量、数据类型等基本概念讲起,通过解决“猜数字”“计算米粒”等问题,逐步熟悉Python开发环境和编程方式;然后结合程序流程图,讲授使用顺序结构、选择结构和循环结构编程的方法,逐步掌握结构化的编程思想;最后讲授利用函数进行模块化设计以及字符串、容器、文件等实用知识点。本篇在教学案例设计上讲究趣味性、知识性和实用性,通过完成一系列的挑战,让初学者感受到编程的用处,从而激发学习编程的兴趣。

中篇是算法基础,使用Python讲授基本的算法策略和应用场景。首先从二分查找算法讲起,引入时间复杂度的概念;然后结合具体案例,分别介绍递归算法、排序算法、贪心算法、搜索算法;最后讲授与数学相关的凸包计算和加密算法。本篇为初学者揭开算法的神秘面纱,让其了解常用基本算法的原理和实现方法,同时巩固编程知识。

下篇是AI应用,讲授使用各种Python库进行数据分析和实现AI应用项目。首先学习numpy、pandas和matplotlib三个库,然后安排了3个体验性质的人工智能编程项目,分别是预测房价、泰坦尼克号生还者预测和手写数字识别。本篇通过初学者的亲身应用,消除对人工智能技术的神秘感。

在本书的编写过程中,楼惠群、颜慧佳、陈超颖、李祖理、朱志军、杨阳、戚远航等老师提出了不少宝贵意见,在此一并表示感谢!

本书学习建议

本书以解决问题为导向来设计内容,通过趣味案例激发学习者的编程兴趣,带领初学者循序渐进地学习Python和人工智能知识,避开编程学习中的各种技术陷阱。有别于其他说明书式的教材,这也是本书的特色所在,更加适合初学者作为入门教材。由于篇幅所限,在本书中使用到的各种Python库、函数及其用法等未能进行全面讲解,仅仅介绍了基本用法。作为本书的一个补充,建议Python初学者利用好互联网上各种免费的学习网站,遇到不清楚的函数用法、语法规则等问题,可以随时查阅相关内容。

本书配套资源

本书中的程序全部基于Python 3.7版本编写,所有示例程序均已调试通过。

读者可以关注微信公众号“矩阵学堂”或登录华信教育资源网(www.hxedu.com.cn)获取本书的范例程序文件、数据文件、课后习题答案等资源,另外还为有需要的读者提供了Anaconda软件安装包。

读者也可以加入QQ群(949402464)获取本书资源包,还能和作者及网友在线交流,互相学习和分享经验。

由于编者水平有限,书中难免有不妥之处,还请读者朋友不吝赐教。请读者关注作者公布的微信公众号和QQ群,以便及时了解本书的最新勘误信息。

本书适用对象

本书既适合作为高校计算机公共基础课的教材,也适合作为Python爱好者的入门教材,同时也可以作为相关科技社团和编程培训机构的参考教材。作者于杭州上篇Python入门CHALLENGE 00构建Anaconda编程环境——准备工作0.1 Anaconda简介

在实际Python编程开发中,程序员并不仅仅使用Python官方的编程命令来写代码,而是需要使用到大量的第三方工具。但其不会亲手去写每个功能,否则会有成千上万的程序员反反复复写着具有同样功能的代码,造成极大的人力资源浪费。

程序员可以把自己曾经写好的一段代码重新拿来在新的编程项目里面使用,就好像把一张照片复制一份放到新的相册一样。同样,程序员也会把自己写好的一段段代码贡献出来,与他人互相分享,互相借鉴,如此一来,编程开发就好像是利用各种代码片段来搭积木,这就是模块化。全世界的开发者已经为Python开发了数以万计的模块,实现了千变万化的功能,程序员可以把这些模块自由组合成各种软件和程序。

那么问题也随之而来:如何安装别人编写的模块?安装后怎么卸载?怎么更新已经用到的模块?如果张三开发的A模块里面又使用了李四开发的B模块,该如何处理?这时程序员就需要一个模块管理工具,像苹果手机的App store那样来管理各种各样的模块。“工欲善其事,必先利其器”。Anaconda就是目前最方便的Python模块管理工具和集成式开发平台,搭载了很多常用的软件包,除Python之外,还包括Conda、Jupyter、Pandoc、NumPy、SciPy、Matplotlib等常用工具。一旦安装了Anaconda,便不再需要去考虑环境配置、工具包依赖等琐事,只要下载安装对应操作系统以及Python解释器版本的程序包,便可以一次性获得300多种用于科学和工程计算相关任务的Python工具包的支持,所以Anaconda也被称为“Python全家桶”。本书涉及的工具包仅仅是其冰山一角,感兴趣的读者可以去其官网深入阅读,地址为https://www.anaconda.com。0.2 安装Anaconda

从现在开始,请读者准备一台安装了Windows或Mac OS操作系统的个人计算机。本节将从零开始,向读者介绍如何在这两个主流操作系统上,安装并配置Anaconda。

这里需要提前向读者声明:Python编程语言当前有两个主流版本,分别是Python 2.×与Python 3.×。因为一些“历史遗留”问题,使得这两个版本不仅无法相互兼容,而且就连一些语法都不一致。所以,建议读者在学习Python时,姑且把其视为两种不同的编程语言。本书中所有编写的示例代码都可以流畅运行于Mac OS的Python 3.7平台。小贴士Python 2.×与Python 3.×不兼容的历史原因错综复杂,感兴趣的读者可以阅读Python核心开发团队成员Brett Cannon的博客,地址为https://snarky.ca/why-python-3-exists/。

1. Windows

① 从https://www.anaconda.com/distribution/#windows中下载相应Python版本的Windows版安装包。因为有数百个模块打包在一起,所以文件比较大,请慢慢等待。

② 双击下载好的安装包,并根据安装向导的提示逐步进行。注意:在指定的安装路径中,不要包含任何空格或中文字符,如图0-1所示。图0-1 设置Anaconda安装路径

③ 安装完成后,打开命令行工具Anaconda Prompt,输入conda info命令并按回车键,如果得到类似如图0-2所示的界面,就说明安装成功了。图0-2 安装成功界面

2. Mac OS

① 从https://www.anaconda.com/distribution/#macos中下载相应Python版本的Mac OS安装包。

② 双击下载好的安装包,并根据安装向导的提示逐步进行,如图0-3所示。图0-3 安装Anaconda Mac OS版

③ 安装完成后,在Launchpad中找到并打开Anaconda Navigator,如果可以正常打开,就说明安装成功了。Anaconda Navigator的主界面如图0-4所示。图0-4 Anaconda Navigator主界面0.3 Python开发环境

在准备编写和运行Python源代码之前,除了可以在Windows或Mac OS的命令行控制台中通过输入Python命令调用最为基本的解释器环境,还可以使用很多功能更加丰富和强大的集成开发环境(Integrated Development Environment,IDE)。这些免费或商用的软件主要是为了服务于专业的编程人员,协作开发大中型应用程序。

本书的程序和代码全部使用JupyterLab这款IDE编写。JupyterLab是一款基于浏览器的笔记本风格的解释器环境,它允许用户创建和共享包含实时代码、公式、可视化和叙述性文本的文档,用途包括数据清洗和转换、数值模拟、统计建模、数据可视化、机器学习等。如图0-5所示,在安装Anaconda的同时,JupyterLab就会自动附带。图0-5 JupyterLab主界面

Jupyter Notebook源于Ipython Notebook,是使用Python(也有支持R、Julia、Node等其他语言的内核)进行代码演示、数据分析、可视化、教学的很好的工具,对Python的愈加流行和其在人工智能领域的领导地位有很大的推动作用。JupyterLab是Jupyter Notebook的升级版本,提供了更好的用户体验。例如,可以同时在一个浏览器页面打开并编辑多个Notebook,支持预览和编辑更多种类的文件,包含代码文件、Markdown文档、JSON、yml、csv和各种格式的图片,还可以使用JupyterLab连接Google Drive等云存储服务,极大地提升了编码生产力。本书的在线版本也是使用JupyterLab编写完成的。小贴士如果用一句话概括,读者可以把JupyterLab理解为支持交互式代码执行、可灵活扩展与分享的在线笔记本。更多关于JupyterLab的介绍,请参见https://jupyterlab.readthedocs.io/en/latest/。0.4 小结

作为全书的起始章节,作者向各位读者简要介绍了学习、实践、开发Python程序和AI应用所需要的工具集:

• Python开发全家桶Anaconda;

• 可交互的在线笔记本JupyterLab。

以上工具组合的灵活使用,可以极大地降低初学者的学习门槛,并为后续学习打下坚实基础。期待大家能够在这些工具的帮助下,展开一段有所收获的编程探索之旅。CHALLENGE 01猜数字——布尔值与智能1.1 挑战描述

程序自动生成一个100以内(含100)的随机自然数,然后提示用户输入一个数字,系统进行判断,如果正确,就告知用户“猜对了”,并结束游戏;如果不正确,就告知用户其输入的数字比实际数字大还是小,并提示用户继续输入。用户猜出数字之后,系统会告知用户本次猜数字的总共次数。如果用户输入0,则中止游戏。1.2 解题思路

由于本书采用的是问题导向、实践驱动的写作思路和叙述结构,所以在每个挑战中,不可避免地会提前使用到一些在后续章节里才会讲解的知识点。借用一下计算机科学中的一个概念,作者把这种情况称之为“前置引用”。

在几乎所有的编程语言中,对于语法元素的使用,一般都会有“先声明,再使用”的要求。直接使用未声明的元素是被禁止的。Python同样如此,例如,如果直接调用一个从未(定义)赋值过的变量,系统就会报错。可是学习、工作、生活,都不是编程语言,它们不会去管一个概念是否定义清晰,直接拿来就用的情况比比皆是。

掌握编程的门槛之所以相对较高,是因为它的知识点结构是非线性的。在大多数学科的教材中,每个章节涉及的知识点都是线性关联的。第一章学好了,就有基础学第二章,第二章的概念不会出现在第一章之中。但编程涉及的知识点没有办法这样组织,因为会存在大量的“前置引用”。那么,学习者该如何从容应对含有“前置引用”的知识呢?有没有一套行之有效的应对策略呢?

大多数难以掌握的技能都有“前置引用”过多这个特点,人们通常用“学习曲线陡峭”来形容这类知识。作者认为,对于充满了“前置引用”的信息密度极高的知识结构,读者需要做好多次重复学习的准备,就像有时候你需要多观看几遍,才能彻底看懂一部好电影一样。“书读百遍,其义自见”,道理就在这里。在这种情况下,“囫囵吞枣”就不是一个贬义词了,尤其是在第一遍遇到“前置引用”时,不妨先“囫囵吞枣”,建立起大的框架即可,等到后面正式学习过了“前置引用”的知识后,再回过头来,把“囫囵吞枣”的框架校正调优,如此坚持,相信必会学有所成。

回到本次挑战中来,根据挑战描述可知,该挑战的核心任务是请用户不断地猜测计算机随机生成的自然数,直到猜对或用户输入0为止,并统计用户猜数字的次数。在编写程序之前,先来分析并确定解决问题的算法。所谓算法(Algorithm),指的是解决问题的方法和步骤。使用自然语言描述猜数字的算法,其步骤如下。

① 计算机生成一个100以内的随机数,并将猜数字计数器置为1。

② 请用户输入一个非负整数,如果输入0,则结束程序,否则进入第③步。

③ 判断用户输入的数字是否为计算机生成的随机数,如果正确,则输出结果并结束,否则将计数器加1,然后回到第②步。

除了使用文字描述算法,如果想要更加直观地描述上述算法,还可以使用流程图来描述,见图1-1。这个流程图展示了通过判断用户输入的数字来进行不同的处理流程。两个菱形框内是对用户输入的判断条件,并根据判断结果来选择相应的分支继续执行。图1-1 猜数字流程图小贴士设计算法是编程的核心。为了表示一个算法,可以用不同的方法。常用的有自然语言、流程图、伪代码、PAD图等。这其中以特定的图形符号加上说明,表示算法的图,称为算法流程图。流程图用一些框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。对流程图感兴趣的读者可以继续深入阅读Creately上的博客教程,地址为https://creately.com/blog/diagrams/flowchart-guide-flowchart-tutorial/。1.3 编程实现

在上面的算法分析中,使用了自然语言和流程图,分别描述了猜数字的解题思路和算法,接下来使用Python来编程实现。在实现的过程中,会使用到一些“前置引用”,读者可以按照上文中的方法处理。请读者在Anaconda环境中,启动JupyterLab工具,新建一个Notebook,并将文件名设置为“猜数字.ipynb”,然后保存,接下来开始编写Python代码。

① 使用Python中的随机数模块random随机生成一个100以内的自然数。Python代码如下,其中 # 开头的文字是注释,注释是对一段代码的解释和说明,可提高程序代码的可读性,让读者能够更加轻松地了解代码的含义,注释不会被计算机执行。

代码如下:

② 循环重复接收用户输入的数字,如果是0,则停止程序(循环)。

代码如下:

③ 判断用户输入的数字是否为计算机生成的随机数,如果正确,则输出结果并结束,否则将计数器加1后继续循环执行。

代码如下:“猜数字”挑战的完整程序代码如下,其中'''之间为多行文字的注释。将源代码编写妥当并保存,然后运行程序,根据提示进行测试,看看程序是不是按照预期执行的。1.4 布尔值

先来认识一位19世纪最重要的数学家之一:乔治·布尔。乔治·布尔于1815年11月2日生于英格兰的林肯,是皮匠的儿子,由于家境贫寒,布尔不得不在协助养家的同时为自己能受教育而奋斗。1847年,32岁的布尔出版了《逻辑的数学分析》,这是他对符号逻辑诸多贡献中的第一次,这本书很短,只有86页,但最终成为了人类的瑰宝。在书中,布尔很好地解释了如何使用代数形式表达逻辑思想。1849年,他被任命位于爱尔兰科克的皇后学院担任数学教授。1854年,他出版了《思维规律的研究》,在这本书中布尔介绍了现在以他的名字命名的布尔代数。布尔于1864年因肺炎去世。布尔在世的时候,人们并未对他的布尔代数产生什么兴趣。图1-2 1864年的乔治·布尔

直到70年后,克劳德·香农发表那篇著名论文A SYMBOLIC ANALYSIS OF RELAY AND SWITCHING CIRCUITS之后,布尔代数才开始被大规模应用到实处。

在Python中,布尔值(Boolean Value)用True和False(首字母大写)来表示。任何一个逻辑表达式(用逻辑运算符将关系表达式或逻辑量连接起来的有意义的式子)都会返回一个布尔值。例如,对于逻辑表达式,用自然语言描述就是“1等于2吗?”,它的布尔值显然就是False;对于逻辑表达式,用自然语言描述就是“1不等于2吗?”,它的布尔值是True。

在上面的“猜数字”挑战的编程实现中,有两处关键点均需要计算出正确的布尔值:判断用户输入是否为0和判断用户是否猜中,然后根据计算结果是True还是False,再执行相应的操作。

布尔值经常通过关系运算符和逻辑运算符的组合使用计算出来。关系运算符是 <、<=、>、>=、==、!=,逻辑运算符则包含and、or、not。小贴士请小心区分大小写。因为Python解释器是对大小写敏感的,对它来说,True和true不是一回事。同时,自然语言中的 “等于”,在Python中,使用的符号是 ==,而不是单个等号。单个等号有其他用处。1.5 关系运算符

使用关系运算符最重要的前提是操作数之间必须可以比较大小。例如,把一个字符串和一个数字进行大小比较就是毫无意义的,Python也不支持这样的运算。Python的关系运算符如表1-1所示。表1-1 Python的关系运算符

除了等于、大于、小于,Python还有一个常用运算符in,对于表达式'a' in 'Syman',用自然语言描述就是:'a' 存在于 'Syman' 这个字符串之中吗?表示从属关系。1.6 逻辑运算符

逻辑运算符and、or、not(全小写)常用来连接逻辑表达式以构成更加复杂的逻辑表达式,并且and和or均具有惰性求值(也叫逻辑短路)的特点,即当连接多个表达式时只计算必须要计算的值。在编写复杂逻辑表达式时可以充分利用这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码的运行速度。各种逻辑运算组合及结果如图1-3所示。图1-3 各种逻辑运算组合及结果

逻辑运算代码实例及运行结果如下。

代码如下:

运行结果为:1.7 程序的智能

计算机程序(Computer Program)是一组计算机能识别和执行的指令,运行于计算机上,满足人们某种需求的信息化工具。它以某些程序设计语言编写,运行于某种目标结构体系上。打个比方,程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。一般来说,以英语文本为基础的计算机程序要经过编译、链接才能成为人难以解读,但可轻易被计算机所解读的数字格式,然后启动运行。

从定义上来看,程序一点都不神秘,它是按照一定顺序完成任务的流程。做个类比,厨师做一盘蛋炒饭也是基于菜谱完成了一个程序。只不过菜谱这种程序,编写者是人,执行者还是人;而计算机程序,编写者是人,执行者是计算机。同时,菜谱是用自然语言编写的,计算机程序则是程序员用编程语言编写的。

再进一步思考,计算机程序与其他程序最重要的差异就在于计算机能做逻辑运算。一旦程序代码编写好后,计算机在执行的过程中,除了可以按顺序执行,还可以根据不同情况执行不同的任务。计算器和计算机都是电子设备,但计算机更加强大的原因,用通俗的说法就是它的“可编程”。而所谓可编程的核心要素就是逻辑运算及其相应的流程控制,也正是因为这些特点,才使得计算机实现某些“智能属性”成为可能。1.8 小结

本次挑战中,作者通过“猜数字”问题,希望各位读者能够掌握布尔值的概念、作用及其计算方法,具体包括:

• 布尔代数;

• 关系运算符;

• 逻辑运算符;

• 基于逻辑运算的程序智能。1.9 巩固练习

程序里的注释是非常重要的。它们可以用自然语言告诉某段代码的功能是什么。想要临时移除一段代码时,还可以用注释的方式禁用这段代码。本次练习将让你学会如何使用注释,并复习逻辑运算。阅读如下Python代码,写出运行结果。

代码如下:

请读者先独立思考上面程序的运行结果,然后再照着录入代码,修正自己的错误,观察程序的运行结果是不是自己所想的,最后可以尝试注释某几行代码,看看运行结果有什么变化。CHALLENGE 02国王与米粒——值与运算2.1 挑战描述

在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人——宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个格子摆放1粒米,在第2个格子摆放2粒米,第3个格子摆放4粒米,以后每个格子都比前一个格子加一倍。请您按照这样摆满,把棋盘上所有的64格的米粒,都赏给您的仆人吧!”

国王笑了,认为宰相太小家子气,但等他知道结果后就笑不出声了。那么,宰相要求得到的米粒到底有多少呢?2.2 解题思路“国王与米粒”挑战问题本身并不难,只要能够求出棋盘上每个格子里需要摆放的米粒数,然后将全部格子里的米粒数做一个累加求和即可。设格子的编号为no(1≤no≤64),第no个格子里米粒数为cnt,使用自然语言描述计算米粒的算法,其步骤如下。

① 定义两个整型变量:sum记录结果、no保存当前处理的格子编号。

② 根据变量no的值,判断是否64个格子都已经处理完毕。如果处理完毕,则转至第⑤步。

③ 计算出当前处理格子需要摆放的米粒数cnt,并将cnt累加到最终结果sum上。

④ 将no的值增加1以处理下一个格子,然后转至第②步。

⑤ 输出结果,程序运行结束。

算法流程图如图2-1所示。图2-1 国王与米粒流程图2.3 编程实现

请读者在Anaconda环境中,启动JupyterLab工具,新建一个Notebook,并将文件名设置为“国王与米粒.ipynb”,然后保存,接下来开始编写Python代码。

① 首先定义变量sum,并为其赋初始值0。=是赋值符号,它的作用是将其右边的值保存到左边的变量中。

代码如下:

② 通过for循环语句(先不用管for语句的工作原理),依次计算每个格子里的米粒数,并累加到变量sum中。+=和**都是运算符(Operator),用来对其左、右的值进行相应的运算而后得到一个值,+=为累加运算,将运算符右边表达式的值累加到左边变量上;**为幂运算,即计算2no-1。

代码如下:

③ 打印结果。

代码如下:“国王与米粒”挑战的示例代码及运行结果如下。

代码如下:

运行结果为:

从以上程序的运行结果可知,这个结果是一个天文数字。这个数字有些抽象,可以做一下换算,据粮食部门测算,1千克大米约有米粒4万个,换算成标准吨后,约等于4611亿吨。而我国2018年全国粮食产量约为6.6亿吨(国家统计局数据),考虑到目前中国的粮食产量已是历史上的最高记录,如果就按照2018年的数据计算,可以推算出,宰相要求国王赏赐的米粒,至少相当于中国698年的粮食总产量。小贴士熟悉C/C++或Java等编程语言的读者会知道,这些语言中的整型变量是有大小范围的,如果将上述代码由C语言改写,由于计算结果超出了数据类型范围,显示出的将会是一串奇怪的数字,这种现象称之为“溢出”。而在Python 3.×中,多大的整型数据都是不会溢出的,这也是Python吸引科研人员的原因之一——它非常适合于大数据运算。2.4 值

1. 常量和变量

值是程序的基础组成单元,它就好像盖楼房用的砖块一样,无论什么样的楼房,到最后都主要是由砖块构成。在程序中,被运算的值可以分为常量(Literal)和变量(Variable)。在“国王与米粒”程序中,sum、no是变量,1、65、2是常量。常量的英文单词Literal的中文含义是“字面的”,顾名思义,常量的值就是其字面上的值,所以常量1的值就是1。no是变量,顾名思义,它的值就是可变的。例如,在“国王与米粒”程序的for语句中,变量no的值发生了64次改变:从1到64,而变量sum的值也随着变量no的变化而发生了相应的改变。

2. 标识符

标识符是用来标识某个实体的符号,它在不同的应用环境下有不同的含义。在日常生活中,标识符是某个东西或人的名字;在数学方程中,常用到的变量名或函数名也是标识符;在编程语言中,标识符是程序员编程时使用的名字,常量、变量、函数、语句块都可以有自己的名字,这些名字统称为标识符。标识符由字母、数字和下画线组成,且不能以数字开头。在“国王与米粒”程序中,sum和no就是两个标识符,作为相应两个变量的名字。

在定义标识符时,除了需要满足上述基本要求,还应尽量使用有实际含义的单词或单词组,以便阅读。同时,Python中有一些具有特殊功能的标识符——关键字。关键字是Python已经使用了的,所以不允许程序员定义与关键字相同的标识符,例如,for是一个关键字,所以不能当标识符。在JupyterLab代码环境中调用help( )函数,然后输入keywords命令,就可以显示出Python全部的关键字。

3. 值的类型

在各种主流的编程语言中,基本都会支持以下三种基本数据类型,不同类型的数据对应着不同类型的值。

布尔型(Boolean Value):True或False。

数字型(Number):整数、浮点数、复数。

字符串型(String):以 ' ' 或 " " 括起来的符号或数值的一个连续序列,通常以串的整体作为操作对象。

运算的一个默认法则是:相同类型的值才能相互运算。显然,数字与数字之间的运算是合理的,但如果用 + 这个运算符对一个字符串和一个数字进行运算就会出错,例如,下面的代码在运行时就会出错。

代码如下:

运行结果为:

所以在不得不对不同类型的值进行运算之前,需要先做好类型转换(Type Casting),部分类型转换函数如下。

将字符串转换为数字用int( )、float( )。

将数字转换成字符串用str( )。

将整数转换成浮点数用 float( )。

将浮点数转换成整数用int( )。

如果希望查看某个值属于什么类型,可以使用Python函数type( ),示例代码及运行结果如下。

代码如下:

运行结果为:2.5 运算符

关系运算符和逻辑运算符在挑战1中已做过介绍,本节重点介绍Python中另外两种常用的运算符:数值运算符和字符串运算符。

1. 数值运算符

Python中针对数值的运算符有加、减、乘、除、商、余、幂(+、-、*、/、//、%、**)。其中,+和-可以对单个值进行操作,例如,-3表示负三。其他的运算符需要有两个值才能操作。与其他编程语言不同,在Python中即使两个操作对象是整数,使用/仍会得到浮点型的结果,如果希望得到的是一个整数商(截去余数),则需要使用运算符 //,读者可以在JupyterLab中试一试。从优先级来看,这些运算符中:

• 对两个值进行操作的+、-的优先级最低;

• 稍高的是*、/、//、%;

• 更高的是对单个值进行操作的+、-;

• 优先级最高的是**。

完整的运算符优先级列表,参见官方文档,地址为https://docs.python.org/3/reference/expressions.html#operator-precedence。

2. 字符串运算符

Python中针对字符串,有如下三种操作。

拼接:+和' '。

复制:*。

逻辑运算:in、not in以及<、<=、>、>=、!=、==。

字符串运算示例代码及运行结果如下。

代码如下:

运行结果为:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载