Python程序设计基础教程(慕课版)(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-24 23:19:14

点击下载

作者:薛景 陈景强 朱旻如 龚乐君

出版社:人民邮电出版社

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

Python程序设计基础教程(慕课版)

Python程序设计基础教程(慕课版)试读:

前言

Python语言是目前主流的编程语言之一,具有广泛的应用场景,随着它的迅速普及,国内越来越多的本专科院校正在或准备开设该语言的相关课程。Python语言功能强大且易于学习,使用它编写的程序可以在Windows、macOS、Linux、iOS、Android等软件操作平台上运行。它已经被越来越多的开发者、科研工作者、老师和学生接受。

本书遵循循序渐进的教学规律,从Python语言最基础的知识入手,从解决实际问题的需求出发,引伸出各章的内容,非常适合作为零基础的程序入门级教材使用。

全书共分为11章,内容覆盖程序设计的四大知识板块:基础知识、流程控制及结构化程序设计、数据的操作、面向对象程序设计。本书的主要特点如下。

第一,本书面向本专科零编程基础的非计算机专业学生。为了突出编程思想的培养,并没有介绍数据库、网络编程等专业性较强的内容,而是选取比较基础的语法、流程控制、数据操作等内容进行介绍,选取的内容具有针对性,且浅显易懂,特别适合编程的入门学习者。

第二,本书作为教材,在充分考虑课时和考试范围的基础上,注重趣味性和娱乐性。全书以一连串有趣的实例将知识点串联起来进行教学,使相对枯燥的编程学习变得有趣和生动,让学生在快乐的编程体验中学会编程。

第三,本书拥有国内领先的配套资源。读者可以结合本书在线学习MOOC课程(https://www.icourse163.org/),还可以免费使用本书编写组开发的在线教学辅助平台(https://c.njupt.edu.cn/),并下载电子课件(PPT)和课后习题答案。通过使用以上配套资源,教与学将变得更加方便、简单。

本书是编写组各位老师多年教学研究和经验的凝练、总结,更是课程组集体智慧的结晶。第1章~第3章、第11章由薛景编写,第4章、第5章由朱旻如编写,第6章由龚乐君编写,第7章~第10章由陈景强编写,付竟芝、叶水仙参与了课后习题和配套实验的编写。薛景负责最后的统稿工作。本书配套的教学视频由薛景、陈景强、付竟芝、朱旻如、张勤、吴敏共同制作完成。此外,南京邮电大学程序设计课程组的各位老师对本书提出了许多宝贵的建议,在此对他们的辛苦付出和支持表示衷心的感谢!

由于编写组水平有限,书中疏漏及不足之处在所难免。如有问题或发现错误,烦请直接与编写组联系,不胜感激!电子邮箱:xuejing@njupt.edu.cn。本书编写组2018年4月在线教学辅助平台使用说明

本书配套建设了全国领先的在线教学辅助平台,为教师教学和学生学习Python程序设计课程提供一站式、全方位免费服务,网址:https://c.njupt.edu.cn/。(1)本书为教师提供拥有班级管理、出勤管理、题库管理、师生在线交流等强大的功能平台,具体使用手册见本书附录B。(2)本书为读者提供了丰富的配套资源,包括电子课件、源代码、教学视频、在线编程练习,具体使用手册见本书附录C。(3)如果您在使用过程中有任何疑问,请加入QQ群:217681442进行咨询。

注意:所有教学资源和平台使用仅限买本书的读者学习使用,不得以其他任何方式传播。第1章 编程前的准备工作

学习目标

• 了解Python语言的特点。

• 掌握安装Python 3.x运行环境的方法。

• 掌握在交互模式下运行Python语句的方法。

• 掌握建立、保存、打开、编辑以及运行Python程序文件的方法。本章电子课件

程序设计(编程)是一项非常热门的计算机应用能力,Python语言使学习这项新技能变得非常容易,在深入学习编程之前,你需要先了解它的基础知识,并为今后的学习做准备。本章将讨论如何搭建Python语言的开发环境,以及如何编辑和运行一个简单的Python程序。1.1 关于编程

众所周知,计算机在人们的工作和生活中发挥了巨大的作用,它可以帮助人们完成非常复杂的计算工作,处理海量的数据,分析数据之间的关系,最后还能以图形化的方式将处理结果展现在人们的面前。那么,计算机是如何完成这些工作的呢?关于编程

其实,计算机并不是天生就具备这些超强的能力,它只不过是按照人们预先设置好的程序(Program)一步一步地完成自己的工作,而程序就是一组告诉计算机应该如何正确工作的指令集合。因为计算机的计算速度特别快,所以使用计算机可以大大提高人们的工作效率。

简单地说,程序设计也就是编程(Programming),是让计算机按照程序员(Programmer)给出的指令去做一些它能够胜任的工作,如解一个方程、绘制一幅图像、获取一张网页上的数据等。如果你直接对着计算机说中文,计算机是不能理解你所说的内容的,所以你需要使用计算机能够理解的语言和它交流。计算机能够理解的语言,称为程序设计语言(Programming Language),本书的核心内容就是教你使用一门程序设计语言——Python,使用这门语言,计算机就可以帮助你把工作做得更快、更好。1.2 关于Python

Python是一种极少数能兼具简单与功能强大两个特点的编程语言。你将惊异地发现这门编程语言是如此简单,它专注于如何解决问题,而非拘泥于语法与结构。

Python的官方网站是这样描述这门语言的。

Python是一款易于学习且功能强大的开放源代码的编程语言。它可以快速帮助人们完成各种编程任务,并且能够把用其他语言制作的各种模块很轻松地联结在一起。使用Python编写的程序可以在绝大多数平台上顺利运行。1.2.1 Python语言的特点

选择Python语言作为程序设计的入门语言,其主要原因是相比于其他计算机编程语言,它具有以下特点。(1)简单(Simple)。Python是一门语法简单且风格简约的语言。阅读一份优秀的Python代码就如同在阅读英语文章一样,尽管这门英语也会有严格的语法格式!Python这种接近自然语言的书写特质正是它的一大优势,能够让你专注于解决问题的方案,而不是语言本身。(2)易于学习(Easy to Learn)。正如你即将看到的,Python是一门非常容易入门的语言,它具有一套简单的语法体系,这大大降低了学习计算机编程的门槛。(3)自由且开放(Free and Open Source)。Python是FLOSS(自由/开放源代码软件)的成员之一。简单来说,可以自由地分发这一软件的拷贝,阅读它的源代码,并对其做出改动,或是将它的一部分运用于一款新的自由程序中。FLOSS基于一个可以分享知识的社区理念而创建。这正是Python能如此优秀的一大原因——它由一群希望看到Python能变得更好的社区成员创造,并持续改进至今。(4)高级语言(High-level Language)。就像其他的计算机高级语言一样,在用Python编写程序时,你不必考虑诸如程序应当如何使用CPU或者内存等具体实现细节。(5)跨平台性(Portable)。由于其开放源码的特性,Python已经被移植到其他诸多软件操作平台(如Windows、mac OS、Linux、iOS、Android等)中。如果小心地避开了所有系统依赖型的特性,不必做出任何改动,所有的Python程序就可以在其中任何一个平台上工作。(6)解释执行(Interpreted)。使用诸如C或C++等编译执行类语言编写程序时,需要将这些语言的源代码通过编译程序(Compiler)转换成计算机使用的语言(如由0与1构成的二进制码),当运行这些程序时,链接程序或载入程序将会从硬盘中将程序复制到内存中并将其运行。

然而,作为解释执行类的Python语言,不需要将其编译成二进制码,只需要直接从源代码运行该程序。在程序内部,Python会将源代码转换为字节码(Bytecodes)的中间形式,然后再转换成计算机使用的语言,并运行它。实际上,这一流程使得Python更加易于使用,你不必再担心该如何编译程序,或如何保证适当的库被正确地链接并加载等步骤。这种运行方式使得Python程序更加易于迁移,只需要将Python程序复制到另一台计算机便可让它立即开始工作!(7)面向对象(Object Oriented)。Python同时支持面向过程编程与面向对象编程。在面向过程(Procedure-oriented)的编程语言中,程序仅仅是由带有可重用特性的子程序与函数构建起来的。在面向对象的编程语言中,程序是由结合了数据与功能的对象构建起来的。与C++或Java这些大型的面向对象语言相比,Python用特别的、功能强大又简单的方式来实现面向对象编程。(8)可扩展性(Extensible)。如果你需要代码的某一重要部分能够快速地运行,或希望算法的某些部分不被公开,可以在C或C++语言中编写这些程序,然后再将其运用于Python程序中,Python可以完美地与这些使用其他语言编写的程序一起工作。(9)可嵌入性(Embeddable)。可以在C或C++程序中嵌入Python程序,从而向程序用户提供编写脚本(Scripting)的功能。(10)丰富的库(Extensive Libraries)。实际上Python标准库的规模非常庞大。它能够帮助用户完成诸多事情,包括正则表达式、文档生成、单元测试、多线程、数据库、网页浏览器、CGI、FTP、邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面),以及其他系统依赖型的活动。只需记住,只要安装了Python,这些功能便随时可用。

除了标准库以外,你还可以在Python库索引(https://pypi.python.org/pypi)中发掘许多其他高质量的库。

Python实在是一门令人心生激动且功能强大的语言。它恰当地结合了性能与功能,使得编写Python程序是如此简易又充满了乐趣。1.2.2 Python 2与Python 3

如果你对Python 2与Python 3之间的区别不感兴趣,那么可以略过本小节。但务必注意你正在使用的版本,因为不同版本的Python在程序语法上并不兼容,即遵循Python 2语法书写的源程序也无法顺利地在Python 3的运行环境中运行,反之亦然。本书是以Python 3为默认运行环境撰写的。

只要正确理解并学习了其中一个版本的Python,你就可以很容易地理解与另一版本的区别,并能快速学习如何使用。在学习中,真正困难的是学习如何编程以及理解Python语言的基础部分。这便是本书希望讨论的关键目标,而一旦你达成了该目标,便可以根据实际情况,决定是使用Python 2还是Python 3。

要想了解有关Python 2和Python 3之间区别的更多细节,可自行在网上查询学习。1.3 安装Python运行环境1.3.1 在Windows下安装

访问Python的官方网站并下载最新版本的Python安装程序,请根据Windows版本(32位或者64位)选择对应的安装文件,如图1-1所示。其安装过程与Windows平台其他软件的安装过程并没有太大的差别。在Windows下安装图1-1 根据Windows版本选择对应的安装程序进行下载

注意:请务必在安装界面中确认勾选了Add Python 3.7 to PATH选项,如图1-2所示。图1-2 安装时请勾选Add Python 3.7 to PATH选项1.3.2 在macOS下安装

对于macOS用户,既可以使用Homebrew并通过命令brew install python 3进行安装,也可以在官方网站下载对应的macOS版本安装程序进行安装,如图1-3所示。图1-3 下载对应的macOS版本安装程序安装Python 3

验证安装是否成功,可以按Command+Space组合键(以启动Spotlight搜索),输入Terminal并按下Enter键启动终端程序。现在,试着运行Python 3来确保其没有任何错误。1.4 第一个Python程序

下面将介绍如何在Python中运行一个传统的“Hello World”程序,包括如何编写、保存与运行Python程序。

通过Python运行程序有两种方法:使用交互式解释器提示符和直接运行一个源代码文件。下面介绍如何使用这两种方法。1.4.1 在交互模式下运行Python程序

在操作系统中打开终端(Terminal)程序(在Windows操作系统中被称为命令提示符),然后输入python 3并按Enter键来打开Python提示符工具(Python Prompt)。在交互模式下运行Python程序

启动Python后,会出现“>>>”。这个被称作Python解释器提示符(Python Interpreter Prompt)。

在Python解释器提示符后输入以下语句。print("Hello World!")

在输入完成后按Enter(回车)键,会看到屏幕上打印出Hello World!字样。

用户会注意到,Python立即输出了一行结果!刚才输入的便是一句独立的Python语句。使用print命令可以打印用户提供的信息。这里提供了文本Hello World!,然后它便被迅速打印到屏幕上。

如果要退出提示符,只需在解释器提示符后输入:exit()

注意:exit后要包含一对括号(),并按Enter键来退出解释器提示符。

在macOS的终端程序中,上述操作的执行过程如图1-4所示。图1-4 在Python解释器提示符中执行print("Hello World!")1.4.2 选择一款编辑器

当我们希望运行某些程序时,总不能每次都在解释器提示符中输入希望运行的程序。因此需要将它们保存为文件,以后便可以多次运行这些程序。

创建Python源代码文件,需要一款能够提供输入并存储代码的编辑器软件。一款优秀的编辑器能够使编写源代码的工作变得轻松许多。故而选择一款编辑器至关重要。要像挑选想要购买的汽车一样挑选编辑器。一款优秀的编辑器能够帮助用户更轻松地编写Python程序,使用户的编程之旅更加舒适,并帮助找到一条更加安全、快速的道路到达目的地。

对编辑器的最基本要求为语法高亮,这一功能通过标以不同的颜色来帮助区分Python程序中的不同部分,从而更好地阅读程序,并使它的运行模式更加形象化。

如果你对应该从哪里开始还没有概念,本书推荐使用PyCharm教育版软件,它在Windows、macOS X、GNU/Linux上都可以运行。在下一节你将了解到更多信息。

如果你使用的是Windows系统,不要用记事本——这是一个很糟糕的选择,因为它没有语法高亮功能,而且不支持文本缩进功能,之后你将会慢慢了解这一功能究竟有多重要。而一款好的编辑器能够自动帮助你完成这一工作。

如果你已是一名经验丰富的程序员,那一定在用Sublimes Text或Visual Studio Code了。无需多言,它们都是最强大的编辑器之一,用它们来编写Python程序自是受益颇多。

再此重申,你可以选择任意一款合适的编辑器——它能够让编写Python程序变得更加有趣且容易。同时,此刻你更应该专注于学习Python而不是编辑器的使用方法。1.4.3 PyCharm

PyCharm教育版是一款有助于编写Python程序的免费编辑器,读者可以在官网进行下载。(1)打开PyCharm时,会看见如图1-5所示的界面,单击Create New Project。图1-5 PyCharm欢迎界面

在如图1-6所示的界面中,选择Pure Python。图1-6 选择Pure Python项目(2)将项目路径位置中的untitled更改为helloworld,如图1-7所示。图1-7 更改项目的保存路径(3)建立好项目之后,在如图1-8所示的界面中,右击选中侧边栏中的helloworld,并选择New→Python File。图1-8 新建Python源代码文件(4)输入源代码的名称,这里输入Hello,这是第一个源代码的名称,如图1-9所示。图1-9 输入源代码的名称

现在可以看见一个新建好的空白源代码文件,如图1-10所示。图1-10 新建好的空白源代码文件(5)删除那些已存在的内容,输入以下代码。print("hello world")(6)右击输入的内容(无需选中文本),然后单击Run 'Hello',如图1-11所示。图1-11 运行源代码文件

此刻可以看到程序输出的内容,如图1-12所示。

非常好!虽然只是刚开始的几个步骤,但从今以后,创建一个新的文件时,记住只需在helloworld上右击,选择New→Python File,执行如上步骤,输入内容并运行即可。图1-12 源代码运行后会输出相应的结果1.4.4 以文件模式运行Python程序

在上一节中我们学习了如何使用一款代码编辑器软件来完成代码的创建、保存和运行的相关操作,如果想要直接运行一段从网络上下载的Python程序,可以按以下步骤操作。(1)打开终端(命令提示符)窗口。(2)使用cd命令修改目录到保存文件的地方,如cd/tmp/py。(3)输入命令Python源代码文件名来运行程序。

例如,在Windows的命令提示符中运行保存好的hello.py程序(假设hello.py保存在C:\Temp\HelloWorld文件夹下)的输出结果如图1-13所示。图1-13 在命令提示符中运行Python源代码的操作过程

如果得到了与图1-13类似的输出结果,那么恭喜你!——你已经成功运行了第一个Python程序,亦成功穿过了学习编程最困难的部分。

如果你遭遇了什么错误,请确认是否已经正确输入了上面列出的内容,并尝试重新运行程序。注意,Python是区分大小写的,如print和Print是不同的,前者的p是小写的,而后者的P是大写的。此外,你需要确保每一行的第一个字符前面都没有任何空格或制表格,我们会在后面的章节中介绍为什么字符的格式对于Python源代码格外重要。1.4.5 Python之禅

无论使用哪一种编程工具来书写Python语言的代码,如果想编写出好的程序,本书强烈建议你先在Python的交互模式中输入import this语句,Python会告诉你设计程序的基本原则,这些基本原则才是程序员在程序设计过程中需要经常思考并努力实现的目标。>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

为了方便读者理解,本书引用了网络上的翻译,并稍稍做了修改。优美胜于丑陋。(Python 以编写优美的代码为目标。) 明了胜于晦涩。(优美的代码应当是明了的,见名知义,风格相似。) 简洁胜于复杂。(优美的代码应当是简洁的,不要有复杂的内部实现。) 复杂胜于难懂。(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁。) 扁平胜于嵌套。(优美的代码应当是结构流畅的,不能有太多的嵌套。) 间隔胜于紧凑。(优美的代码有适当的间隔,不要把代码都堆放在一起。) 可读性很重要。(优美的代码是给更多的人阅读并使用的,给别人方便就是给自己方便。) 尽管为了实现更多的功能,程序会越来越复杂,但特例也不能凌驾于规则之上。 不要忽略任何错误,除非你确认要这么做。(任何小错误,都会让你的程序崩溃。) 当存在多种可能时,不要尝试去猜测。(程序应该尽最大努力处理可能遇到的各种情况。) 尽量找一种,最好是唯一一种明显的解决方案。(因为不明显的东西,别人看不明白呀。)虽然一开始这种方法并不是显而易见的,因为你不是 Python 之父。(编程需要多多练习。) 做也许好过不做,但没有思考的做还不如不做。(思考才是学习编程的主要方法。) 如果实现过程很难解释,那它就是个坏想法。(不去写超出自己能力范围的程序。) 如果实现过程容易解释,那它有可能是个好想法。(易于实现的方法将会提高编程效率。) 命名空间是个绝妙的想法,请多加利用!(一段程序可以是一个文件,而命名空间就是文件夹。)1.5 本章小结

本章我们学习了搭建Python语言开发环境及编写、运行Python程序的相关知识。

程序设计是使用现代计算机技术解决现实问题的关键能力,为了帮助大家掌握这项非常重要的能力,本教材选择Python语言作为学习编程的首选工具,之所以选择Python是因为它足够简单易学且功能强大。

为了运行Python语言的程序,首先在官方网站下载运行环境,值得注意的是,Python有两个不同的版本,分别是Python 2和Python 3,不同版本的Python程序并不能相互兼容,本教材的代码均在Python 3的环境下编写运行。除了使用Python官方提供的开发工具IDE以外,还可以使用PyCharm作为编写Python程序的开发环境。

安装完Python的运行及开发环境之后,可以在开发工具中创建和运行一个Python程序。Python程序的运行方式有两种,分别是交互模式和文件模式,在交互模式下,Python会立刻运行输入的程序并返回运行结果,而在文件模式中,可以将程序代码放在以.py结尾的Python程序文件中,这样就可以反复修改并运行保存在存储器中的程序。1.6 课后习题扫码在线做习题

一、单选题

1. 编译器和解释器的区别是__________。

A. 编译器是一个程序

B. 编译器用于将高级语言翻译成机器语言

C. 在程序解释完成后,便不再需要解释器

D. 编译器处理源代码

2. Python语言的特点不包含__________。

A. Python语言十分简洁

B. Python语言采用编译执行

C. Python语言是面向对象的编程语言

D. Python语言必须修改才能跨平台运行

3. 下列代码运行时不会产生错误的是__________。

A. print('Hello, I'm fine')

B. print("Hello, I'm fine")

C. print('Hello, I'm fine")

D. print("Hello, I'm fine')

4. 下列语句没有错误的是__________。

A. 'hello'+2

B. 'hello'*'2'

C. 'hello'*2

D. 'hello'-'2'

二、填空题

1. 下列表达式的计算结果是__________。>>>30-3**2+8//3*2/10

2. 下列字符串的运行结果是__________。>>>"12"+"34"

三、编程题

编写程序,完成下列题目:将This is TOM字符串输出到三行,每行一个单词。(注意:每个单词后面都没有空格)

输出样例:ThisisTOM第2章 Python语言基础

学习目标

• 掌握数字类型数据的使用方法。

• 掌握字符串类型数据的使用方法。

• 理解常量的概念,掌握常量的使用方法。

• 理解变量的概念,掌握变量的使用方法。

• 理解运算符、表达式的概念。

• 掌握常用运算符的运算规则、优先级等特点。本章电子课件

只是打印出Hello world对于Python来说简直是大材小用。你一定希望Python可以做更多的工作,在这过程中自然会存在很多关于计算的事情。本章将介绍如何让Python完成简单的计算,以及所需的相关知识。2.1 常量和简单数据类型

先举一些常量(Literal Constants)的例子,例如,5和1.23这样的数字常量,或者是如“这是一串文本”或“This is a string”这样的字符串常量。

之所以称这些数据为常量,是因为我们使用的就是它字面意义上(Literal)的值或是内容。不管在哪种应用场景中,数字2总是表示它本身的意义而不可能有其他的含义,所以它就是一个常量,因为它的值不能被改变。

下面通过介绍不同类型的常量,来介绍Python中使用的基本数据类型。2.1.1 数字

常见的数字主要有3种类型——整数(Integers).浮点数(Floats,也称实数)与复数(Complex)。

例如,2或者100都是整数,即没有小数点,也没有分数的表示形式。整数有下列表示方法。(1)十进制整数:如1、100、12345等。(2)十六进制整数:以0X开头,X可以是大写或小写,如0X10、0x5F、0xABCD等。(3)八进制整数:以0O开头,O可以是大写或小写,如0o12、0o55、0O77等。(4)二进制整数:以0B开头,B可以是大写或小写,如0B111、0b101、0b1111等。

整数类型的数据对象不受数据位数的限制,只受可用内存大小的限制。

浮点数(Floating Point Numbers,在英文中也会简写为floats)的例子是3.23或52.3E-4。其中,E表示10的幂。在这里,52.3E-4表-4示52.3*10。

除了整数和浮点数,Python还考虑到了复数的表示方式,复数是由实部和虚部组合在一起构成的数。例如,3+4j、3.1+4.1j,其中加号左边的数为实部,加号右边的为虚部,用后缀j表示。2.1.2 True和False

和现实生活一样,计算机中也有表示对和错、真和假这样的逻辑常量,它们就True和False,正如字面上的意思,True表示真,用来表示某个命题是正确的,False表示假,用来表示某个命题是错误的。请记住,计算机中是没有半对半错的概念的,非假即真,一定是这样的!2.1.3 字符串

一串字符串(String)就是一组字符(Characters)的序列(Sequence)。基本上,可以把字符串理解成一串词语的组合,可以是任何你能想到的字符所进行的随意组合。字符串

将会在几乎所有的Python程序中使用字符串,所以请务必关注以下细节。(1)单引号

可以使用单引号来指定字符串,例如,'将字符串这样框进来'或'Quote me on this'。

所有引号内的字符,包括各种特殊字符,诸如空格与制表符,都将按原样保留。(2)双引号

被双引号包括的字符串和被单引号括起的字符串的工作机制完全相同。例如,"你的名字是?"或"What's your name?"。(3)三引号

甚至还可以使用3个引号——"""或'''来指定多行字符串,因此,可以在三引号中随意换行,而且可以在三引号之间自由地使用单引号与双引号。例如:''' 这是一段多行字符串。这是它的第一行。 This is the second line. "What's your name?," I asked. He said "Bond, James Bond." '''(4)转义字符

想象一下,如果希望生成一串包含单引号(')的字符串,应该如何指定这串字符串?例如,想要的字符串是What's your name?。不能指定'What's your name?',因为这会使Python对于何处是字符串的开始、何处又是结束而感到困惑。所以,必须指定这个单引号不代表这串字符串的结尾。这可以通过转义字符(Escape Sequence)来实现。在Python中通过\来表示一个转义字符。现在,可以将字符串指定为'What\'s your name?'。

另一种指定这一特别的字符串的方式为:"What's your name?",同样,如果需要在字符串中使用双引号,亦可以使用单引号把字符串包含起来。当然,必须在使用双引号括起的字符串中对字符串内的双引号使用转义序列。最后,如果需要在字符串中表示\,必须使用转义序列\\来指定反斜杠本身。

如果想指定一串双行字符串该怎么办?一种方式即使用如前所述的三引号字符串,或者使用一个表示新一行的转义序列——\n来表示新一行的开始。例如:'This is the first line\nThis is the second line'

Python中常见的转义字符如表2-1所示。表2-1 Python中的常见转义字符

需要注意的是,字符串末尾的反斜杠表示字符串将在下一行继续,但不会添加新的一行。例如:"This is the first sentence. \ This is the second sentence."

相当于"This is the first sentence. This is the second sentence." (5)原始字符串

如果需要指定一些未经过特殊处理的字符串,如转义序列,那么需要在字符串前增加r或R来指定一个原始字符串(Raw String)。例如:r"Newlines are indicated by \n" 2.1.4 数据类型的转换

为了能让各种不同类型的数据更好地在一起工作,经常需要转换数据类型。为了更好地理解数据类型,此处,在程序中引入type()函数,该函数可以输出参数的数据类型。例如,在交互模式中输入以下命令可以得到各个常量的数据类型。>>> type(100) >>> type(3.14) >>> type("Hello")

在大部分关于数字的运算中,Python会自动把整数类型的数据转换成实数类型,这是因为将整数变成实数并不会损失原来数字中的数据,比如把1变成1.0。但是将一个实数转换成整数类型,原数据中的小数部分会被舍弃(不使用四舍五入)。例如:>>> int(10.5) 10

甚至,在一些字符串中也会包含数字,为了获取字符串中的数字,也需要使用类型转换函数。例如:>>> int("50") 50 >>> float("2.55") 2.552.2 变量与赋值语句变量与赋值语句

如果只使用常量很快就会让人感到无聊,并且不能直观地看到程序的意图,我们需要一些能够存储任何信息并且也能操纵它们的方式,这种方式能够让程序更加容易理解。这种存储命名数据的方式便是变量(Variables)。正如其名字所述那般,变量的值是可以变化的,也就是说,可以用变量来存储任何东西。变量只是计算机内存中用以存储信息的一部分。与常量不同,需要通过一些方式来访问这些变量,因此,需要为它们命名,正如上文所述,为了让包含变量的程序更容易读懂,应该让变量的名称尽可能表达存储在其中的数据的功能和意义。2.2.1 标识符命名

变量的名称是标识符的一个例子。标识符(Identifiers)是为程序中的某些内容提供的指定的名称。命名标识符需要遵守以下规则。

• 第一个字符必须是字母表中的字母(大写ASCII字符、小写ASCII字符或Unicode字符)或下画线(_)。

• 标识符的其他部分可以由字符(大写ASCII字符、小写ASCII字符或Unicode字符)、下画线(_)、数字(0~9)组成。

• 标识符名称要区分大小写。例如,myname和myName并不等同。要注意前者是小写字母n,后者是大写字母N。

• 有效的标识符名称可以是i或name_2_3,无效的标识符名称可能是2things、this is spaced out、my-name和>a1b2_c3。2.2.2 对象

需要记住的是,Python将程序中的任何内容统称为对象(Object)。这是一般意义上的说法。我们会说程序中的内容为“某某对象(Object)”,而不是“某某东西(Something)”。2.2.3 赋值语句

为了将数据存放到变量中,需要使用赋值语句,赋值语句的作用是将一系列算式的值,存放到相应的一系列变量中。在赋值语句中,最重要的是赋值号=。例如,以下程序分别将不同类型的数据存储到不同的变量中。>>>num1 = 100 >>>num2 = 2.50 >>>str1 = 'I love Python.'

有的时候,为了让赋值语句简单一些,会使用增量赋值的语法形式,例如,当希望在变量num1的原始数据上加上100,然后保存到变量num1中,可以书写程序如下。>>>num1 += 100

它表达的意思与下面的程序完全一致。>>>num1 = num1 + 1002.2.4 案例:使用变量与常量

输入并运行以下程序。# 例 2.1 使用赋值号给变量赋值 i = 5 print(i) i = i + 1 print(i) s = '''This is a multi-line string. This is the second line.''' print(s)

输出:5 6 This is a multi-line string. This is the second line.

程序的工作原理为:首先,使用赋值运算符(=)将数值常量5赋值给变量i。这一行也被称为声明语句(Statement),因为其工作正是声明一些在这一情况下应当完成的事情:将变量名i与值5用赋值号相连接,表示将数值5赋给了变量i。然后,通过print语句来打印变量i存储的内容,这会将变量的值打印到屏幕上。

然后,将1加到i变量存储的值中,并将得出的结果重新存储进这一变量,然后将这一变量打印出来,并期望得到的值应为6。

类似地,接下来的程序将文本常量赋值给变量s,并将其打印出来。2.3 运算符与表达式

编写的大多数语句都包含了表达式(Expressions)。一个表达式的简单例子是2+3。表达式可以拆分成运算符(Operators)与操作数(Operands)。

运算符是进行某些操作,并且可以用诸如+等符号或特殊关键词加以表达的功能。运算符需要一些数据来进行操作,这些数据就被称作操作数。在上面的例子中,2和3就是操作数。2.3.1 运算符运算符

接下来将简要介绍各类运算符及它们的用法。

为了更好地理解各类运算符的作用,强烈建议在Python的命令行解释器中输入以下范例中的表达式内容,并观察输出结果。例如,要想测试表达式2+3,可以在交互式Python解释器的提示符后输入如下代码。>>> 2 + 3 5 >>> 3 * 5 15 >>>

下面是Python语言支持的运算符。(1)+(加号):两个对象相加。

例如,3+5输出8,'a'+'b'输出'ab'。(2)-(减号)

从一个数中减去另一个数,如果第一个操作数不存在,则假定为零。

例如,-5.2将输出一个负数,50-24输出26。(3)*(乘号)

给出两个数的乘积,或返回字符串重复指定次数后的结果。

例如,2*3输出6,'la'*3输出'lalala'。(4)**(乘方,幂运算)

返回x的y次方。

例如,3**4输出81(即3*3*3*3)。(5)/(除号,结果为实数)

x除以y

例如,13/3输出4.333333333333333。(6)//(整除,结果为整数)

x除以y并对结果向下取整至最接近的整数。

例如,13//3输出4,-13//3输出-5。(7)%(取模,求余数的运算)

%返回除法运算后的余数。

例如,13%3输出1,-25.5%2.25输出1.5。(8)<<(按位左移)

<<将数字的位向左移动指定的位数(每个数字在内存中以二进制数表示,即0和1)。

例如,2<<2输出8,2用二进制数表示为10。向左移2位会得到1000这一结果,表示十进制中的8。(9)>>(按位右移)

>>将数字的位向右移动指定的位数。

例如,11>>1输出5。11在二进制中表示为1011,右移一位后输出101这一结果,表示十进制中的5。(10)&(按位与)

&对数字进行按位与操作。

例如,5&3输出1。按位与是针对二进制数的操作,是指比较两个二进制数的每一位,如果两个相应的二进位都为1,则此位为1,否则为0。在本例中,5的二进制表达为101,3的二进制表达为11(为补全位数进行按位操作写作011),则按位与操作后的结果为001,对应的十进制数为1。(11)|(按位或)

|对数字进行按位或操作。

例如,5|3输出7。按位或是针对二进制数的操作,是指比较两个二进制数的每一位,如果两个相应的二进位有一个为1,则此位为1,否则为0。在本例中,101与011进行按位或操作后的结果为111,对应的十进制数为7。(12)^(按位异或)

^对数字进行按位异或操作。

例如,5^3输出6。按位异或是针对二进制数的操作,是指比较两个二进制数的每一位,如果两个相应的二进位不同,则此位为1,相同为0。在本例中,101与011进行按位异或操作的结果为110,对应的十进制数为6。(13)~(按位取反)

~表示x的按位取反结果为-(x+1)。

例如,~5输出-6。按位取反也称作“按位取非”“求非”或“取反”,沈洁元译本译作“按位翻转”,是针对二进制数的操作,是指对两个二进制数的每一二进位都进行取反操作,0换成1,1换成0。受篇幅与学识所限,本例具体原理不在此处赘述,读者只需按照给出的公式记忆即可。(14)<(小于)

<返回x是否小于y。所有比较运算符的返回结果均为True或False。请注意这些名称中的大写字母。

例如,5<3输出False,3<6输出True。

比较可以任意组成链接,例如,3<5<7返回True。(15)>(大于)

>返回x是否大于y。

例如,5>3返回True。如果两个操作数均为数字,它们首先将会被转换至一种共同的类型,否则它将总是返回False。(16)<=(小于等于)

<=返回x是否小于或等于y。

例如,x=3;y=6;x<=y返回True。(17)>=(大于等于)

>=返回x是否大于或等于y。

例如,x=4;y=3;x>=3返回True。(18)==(等于)

==比较两个对象是否相等。例如:

x=2;y=2;x==y返回True。

x='str';y='stR';x==y返回False。

x='str';y='str';x==y返回True。(19)!=(不等于)

!=比较两个对象是否不相等。

x=2;y=3;x!=y返回True。(20)not(逻辑“非”)

not表示如果x是Ture,则返回False;如果x是False,则返回True。

例如,x=Ture;not x返回False。(21)and(逻辑“与”)

and表示如果x是False,则x and y返回False,否则返回y的计算值。

例如,当x是False时,x=False;y=True;x and y将返回False。在这一情境中,Python将不会计算y,因为它已经了解and表达式的左侧是False,这意味着整个表达式都将是False而不会是别的值。这种情况称作短路计算(Short-circuit Evaluation)。(22)or(逻辑“或”)

or表示如果x是True,则返回True,否则返回y的计算值。

例如,x=Ture;y=False;x or y将返回Ture。在这里短路计算同样适用。2.3.2 运算符的优先级

如果有一个诸如2+3*4的表达式,是优先完成加法运算还是优先完成乘法运算呢?基础数学知识会告诉我们应该先完成乘法运算。这意味着乘法运算符的优先级要高于加法运算符。

下面给出Python中从最低优先级到最高优先级的优先级列表。这意味着,在给定的表达式中,Python将优先计算列表中位置靠后的那些优先级较高的运算符与表达式。

为了保持完整,本书从Python参考手册中引用了表2-2中的内容。在日常工作中,强烈建议使用圆括号操作符来对运算符与操作数进行分组,以更加明确地指定优先级,这也能使程序更加可读。表2-2 运算的优先级(从低到高排序)

到目前为止,表2-2中还没有遇到的运算符将会在后面的章节中解释。

在表2-2中位列同一行的运算符具有相同优先级。例如,+和-具有相同的优先级。2.3.3 改变运算顺序

为了使表达式更加易读,可以使用括号。例如,2+(3*4)要比2+3*4更加容易理解,因为后者还要求了解运算符的优先级。当然使用括号同样也要适度(而不要过度),同时亦应不要像(2+(3*4))这般冗余。

使用括号还有一个额外的优点——它能帮助我们改变运算的顺序。例如,如果希望在表达式中计算乘法之前先计算加法,那么可以将表达式写作(2+3)*4。2.3.4 表达式

表达式(Expressions)简单来说就是一个算式,它将常量、运算符、括号、变量等以能求得结果的有意义内容组合一起,可以用以下程序来理解表达式的作用。# 例 2.2 利用表达式求解算式的结果 length = 5 breadth = 2 area = length * breadth print('Area is', area) print('Perimeter is', 2 * (length + breadth))

输出:Area is 10 Perimeter is 14

矩形的长度(Length)与宽度(Breadth)存储在以各自名称命名的变量中。在程序中可以使用它们并借助表达式来计算矩形的面积(Area)与周长(Perimeter)。接着,将表达式length*breadth的结果存储在变量area中并将其通过使用print函数打印出来。在程序的最后一条语句中,程序直接在print函数中使用了表达式2*(length+breadth)的值。

同时,需要注意到Python是如何漂亮地打印出输出结果的。尽管我们没有特别地在Area is和变量area之间指定空格,但Python会自动补充,因此程序运行后就能得到整洁的输出结果,同时程序也因为这样的处理方式而变得更加易读。这便是Python让程序员的工作变得更加便捷美好的一个范例。2.3.5 eval()函数

如果将一个表达式放在了一串字符中,例如:>>>exp="100/2*3"

那么如何才能让Python求出这个字符串中的表达式的值呢?这里推荐一个非常神奇的函数——eval()函数,它的功能就是计算一串字符串中的合法Python表达式的值,比如在上述语句之后,继续输入以下语句。>>>eval(exp)

执行上述程序后,将会在屏幕上得到这串字符中算式的值,即:150.02.4 输入与输出输入与输出

有些时候程序会与用户交互。例如,希望获取用户的输入内容,并向用户打印出返回的结果。可以分别通过input()函数与print()函数来实现这一需求。2.4.1 input()函数

在程序的执行过程中向程序输入数据的过程称为输入操作,在Python中使用input()函数来实现该功能。例如,编写一个程序让计算机能够记住用户的名字,就会用input()函数提示用户输入他的名字,并把用户的输入存放在变量中,程序如下。name=input("请输入您的名字:")

上述代码的作用是提示用户从键盘上输入自己的姓名,input()函数后面括号中的内容是留给用户的提示信息,它是一个字符串,所以请用双引号把它括起来,在执行input()函数时,提示信息将会打印在屏幕上,然后程序将会暂停,等待用户的输入,直到用户输入了自己的名字并按下回车键,程序才会继续运行,input()函数会获得用户的输入并将其通过赋值号存放到变量name中。

需要提醒的是,使用input()函数获得的数据一律都是以字符串类型存放的,哪怕用户输入的是一个数字,这个数字也是以字符串的形式存放在计算机中。例如,输入以下程序代码。# 例 2.3 从键盘上接收用户输入,并进行计算 num=input(" 请输入一个数字:") x=100+float(num) print(x)

这个程序的功能是获取用户从键盘上输入的数字,然后加上100。当程序运行到input()函数时,暂停下来,并提示用户输入一个数字,输入完毕后,程序继续运行,并在下一行中使用float()函数将用户输入的一个数字从字符串类型转换成实数类型,然后和100相加。读者可以试着把float函数去掉,并运行程序,观察Python的报错信息。2.4.2 print()函数

与输入的功能相似,将程序中的数据输出到屏幕或者是打印机上的工作,称为输出,在Python中,可以使用print()函数来完成向屏幕输出的功能。如果想将2.4.1节中获取的关于姓名的信息打印在屏幕上,可以使用如下语句。>>>print("你好!"+name)

这段代码的作用是将字符串“你好”和变量name中的内容连接在一起,然后通过print()函数将连接后的字符串输出到屏幕上。

还可以在使用print()函数时指定输出对象间的分隔符、结束标志符和输出文件。如果缺省这些参数,则分隔符是空格,结束标志符是换行符,输出目标是显示器。如果要加入自定义的分隔符和结束标志,则可以使用如下格式。>>> print(1,2,3,sep="***",end='\n') 1***2***3 2.4.3 格式化字符串格式化字符串

在处理各种数据的过程中,经常会把一系列的数据组合到一个包含各种信息的字符串中,此时,需要使用format,format不仅可以将各类型数据组合到字符串中,还可以对数据进行格式化。

将以下内容保存为str_format.py文件,并运行程序观察运行结果。# 例 2.4 利用format 进行字符串的格式化操作 age = 20 name = 'Swaroop' print('{0} was {1} years old when he wrote this book'.format(name, age)) print('Why is {0} playing with that python?'.format(name))

输出:Swaroop was 20 years old when he wrote this book Why is Swaroop playing with that python?

可以指定一个字符串使用某些特定的格式(Specification),在调用format方法的过程中,将使用预先定义的格式来修改数据输出时的样式。

请注意在Python中使用序号0表示第一个参数,这意味着索引中的第一位是0,第二位是1,依此类推,所以,此处{0}对应的是变量name,它是该格式化方法中的第一个参数。与之类似,第二个格式{1}对应的是变量age,它是格式化方法中的第二个参数。

虽然,也可以通过字符串的连接运算来达到相同的效果。name + 'is' +str(age) + 'years old'

但这种实现方式看起来并不简单,而且非常容易出错。其次,我们更希望将其他数据类型转换至字符串的工作由format方法自动完成,而不是如这般需要使用特定的函数明确转换至字符串。再次,当使用format方法时,可以直接改动文字而不必与变量打交道。

同时该表示参数序号的数字只是一个可选选项,所以同样可以写成以下形式。

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载