书名:Python编程完全入门教程
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [希] 阿里斯提德•波拉斯(Aristides Bouras)
[希] 卢卡雅•阿伊纳罗斯托(Loukia Ainarozidou)
译 荣 耀
责任编辑 吴晋瑜
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Python and Algorithmic Thinking for the Complete Beginner-Compact Edition: Learn to Think Like a Programmer, by Aristides Bouras, Loukia Ainarozidou(ISBN-13: 9781983276118).
Published by arrangement with Aristides Bouras and Loukia Ainarozidou.
All Rights Reserved.
本书由Aristides Bouras和Loukia Ainarozidou授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究
这是一本经典的Python入门教材。全书采用螺旋式课程教学方法,使用Python编程语言来介绍“算法思维”的相关内容,让你不再“表面化”地学习Python编码,而是从根本上掌握解决问题的方法。
全书共39章,分为入门知识、Python基础、顺序控制结构、决策控制结构、循环控制结构、列表和子程序7个部分。书中有300余个可以实际运行的示例,在不断向更高层次推进的同时反复强化基本思想的学习,力求帮助你更透彻地理解基本概念,提升动手创建程序的能力,进而将算法思维作为解决问题的手段应用于其他编程语言中,达到触类旁通的效果。
本书非常适合计算机专业的学生和教师,也适合编程初学者以及程序员。
本书遵循螺旋式课程教学方法——这是美国心理学家杰罗姆·布鲁纳(Jerome Bruner)于1960年提出的方法。按照这种方法,在教授一门学科的过程中,教师会从一个更复杂的层面不断回顾这门学科中的基本思想,直到学生完全理解了这一学科。首先,教师会简要介绍一些基本要素;其次,教授更多的细节,一次又一次地提到基本要素,最终让它们存储在学生的长期记忆中。
杰罗姆·布鲁纳认为,学习需要学生的积极参与、实验、探索和发现。本书给出了许多例子,其中大部分是可以真正执行的,可供你动手使用Python®并能够创建自己的程序。
是不是学完本书就能创建令人惊叹的小应用程序或令人难以置信的桌面或移动应用程序?答案是“不能”——这是其他图书的内容。有很多书可以教你使用Python、C#或Java创建上述应用的技能,其中很多甚至声称可以在24小时内教会!别笑!它们或许真的可以做到。不过它们都认为有一件事是理所当然的,就是“你知道一些关于计算机编程的基础知识”。遗憾的是,所有这些书都没有教给你作为一个新手程序员需要学习的首要内容——算法思维。
算法思维不仅仅是学习如何编写代码。这是一个涉及学习如何写代码的问题解决过程。本书是为那些希望学习算法思维和计算机编程并且对这两者一无所知的人准备的。
本书包含超过200道已解决的和大约400道未解决的练习题、450道判断题、150道选择题和160道复习题,非常适合学生、教师、新手或初级程序员,或任何希望使用正确的编程习惯和技术开始学习或教授计算机编程的人。
所有复习题以配套资源的形式给出(异步社区图书详情页可以下载),所有复习题的答案和练习题的解答均可从本书网站免费获得。你可以从下面的地址查找答案:
https://www.bouraspage.com
以下是对本书所用约定的一些说明。“约定”是指显示特定文本的标准方式。
本书使用了大量用Python语言编写的示例。Python语句以如下字体显示:
This is a Python statement
关键字、变量、函数和参数有时会出现在正文中。如果是这样,那么这些特殊的文字会以不同于该段落其余部分的文字显示出来。例如,first_name = 5
就是一个正文中的Python语句例子。
某些特殊文本以斜体显示。在本书中,斜体字是指一般类型,必须用适合数据的具体名称加以替换。例如,以下是一条一般形式的Python语句:
def name ( arg1, arg2 ):
为了完善上述语句,我们必须将关键字name、arg1和arg2替换为有意义的内容。在程序中使用该语句时,形式如下:
def display_rectangle (width, height):
在语句的一般形式中,可能还会包含 3 个点(...),也称为“省略号”,跟在一个示例参数列表之后。这些小圆点并非语句的一部分。省略号表示列表中可以有任意多的项。例如,在以下语句的一般形式中:
display_messages( arg1, arg2, … )
省略号表示该列表可能包含两个以上参数。在程序中使用该语句时,可能是这样的:
display_messages( message1, "Hello", message2, "Hi!" )
某些语句或函数的一般形式可能包含方括号[ ],这意味着括起来的部分是可选的。例如,以下一般形式的语句:
range( initial_value, final_value [, step ] )
表示可以省略[``,``step]
部分。
以下两条语句会产生不同的结果,但它们在语法上都是正确的:
range(0, 10)
range(0, 10, 2)
本书的大部分例子采用如下显示方式:
file_29_2_3
a = 2
b = 3
c = a + b
print(c)
顶部的深色标题file_29_2_3
表示打开进行试验的程序文件名。所有包含这种标题的示例均已在互联网上开源。下载地址与复习题和练习题的答案下载地址相同。
本书用提示框帮助你更好地理解一个概念的含义。样式如下:
提示:
这种样式表示一条提示信息。
通常本书会帮助你回顾之前学过的东西(可能是前一章的内容),有时也会提醒你留意应该记住的东西。样式如下:
请记住!
这种样式表示回顾某些知识或你应该记住的知识。
阿里斯提德·波拉斯(Aristides Bouras)[1]生于1973年。早在孩提时期,他就酷爱计算机编程。他在12岁时拥有了自己的第一台计算机——Commodore 64。这台计算机有基于ROM的BASIC编程语言和64KB RAM(内存)!
后来,他获得了希腊比雷埃夫斯技术教育学院计算机工程学位以及色雷斯德谟克利特大学电子和计算机工程学位。
他曾在一家专门从事工业数据流和产品标签化的公司担任软件开发人员,主要为数据终端开发应用软件和用于在微软SQL Server上收集及存储数据的PC软件应用程序。
他已经开发了很多应用程序,如仓储管理系统、公司网站以及其他组织的网站。目前他是一名高中教师,主要教计算机网络、Internet/Intranet编程工具和数据库课程。
卢卡雅·阿伊纳罗斯托(Loukia Ainarozidou)出生于1975年。她13岁时有了自己的第一台计算机——128KB RAM(内存)和3软盘驱动器的Amstrad CPC6128!
她获得了希腊比雷埃夫斯技术教育学院计算机工程学位以及色雷斯德谟克利特大学电子和计算机工程学位。
她曾在一家主营业务为水果和蔬菜包装的公司担任数据后勤部门主管,目前是一名高中教师,主要教计算机网络、计算机编程和数字设计课程。
他们夫妇二人写了很多书,主要是关于算法和计算思维方面的,涉及Python、C#、Java、C++、PHP和Visual Basic等语言。
她嫁给了阿里斯提德·波拉斯(Aristides① Bouras),育有两个孩子。
我们希望你能发自内心地享受这本书。我们尽自己所能让内容变得容易理解,希望即使是那些没有编程经验的人也可以理解本书的内容。
记住:学习是一个位于无限循环结构中的过程,始于出生,持续一生。
[1] 阿里斯提德(Aristides)(公元前530年—公元前468年)是一位古雅典政治家和将军。希腊历史学家希罗多德(Herodotus)称他为“雅典最可敬的人,没有之一”。他为人公正,常被称为“Aristides the Just”。他在古雅典时期享有盛名,帮助雅典人在萨拉米斯海战和普拉蒂亚战役中获胜。
如果没有扬尼斯·T. 卡波斯(Yannis T. Kappos)博士,我们可能永远也写不出这本书。作为AutoCAD技术图书的知名作者,他鼓励我们静下心来开始写作。非常感谢他花时间回答我们的所有问题,即使有的问题听起来很幼稚。
还要特别感谢我们的朋友资深编辑维多利亚·奥斯汀(Victoria Austin)在书稿编辑方面给予的帮助。如果没有她,这本书可能无法充分发挥其潜力。正是源于她的耐心指导和所提出的建设性的宝贵建议,本书得以提高到了一个更高的水平。
现如今,几乎所有工作需要用到计算机。在学校,学生用计算机上网搜索、发送邮件;在工作中,人们用计算机制作报告、分析数据并与客户通信;在家中,人们用计算机玩游戏,与世界各地的人聊天。当然,别忘了还有智能手机,比如iPhone。智能手机也是计算机!
计算机之所以能执行如此多的任务,是因为它们具有编程能力。换句话说,计算机可以执行程序希望它执行的任何任务。程序是计算机为了执行特定任务所需遵循的一组语句(通常称为指令或者命令)。
程序(通常又被称为“应用软件”)对于计算机来说是必不可少的。没有程序,计算机就无法做任何事情。实际上,是程序告诉计算机做什么、何时去做。程序员或软件开发者就是设计、创建并且测试计算机程序的人。
本书将使用Python语言为你介绍计算机编程的基本概念。
术语“硬件”是指组成计算机的所有设备或组件。如果你曾打开过计算机或笔记本电脑外壳,就会发现里面有许多组件,如中央处理器(CPU)、内存和硬盘。计算机不是一个简单的设备,而是由多个设备一起组成的系统。典型计算机系统的基本组件如下。
(1)中央处理器(CPU)。这是计算机实际执行程序中定义的所有任务的元件(基本算术、逻辑运算和输入/输出操作)。
(2)主存(RAM,随机存取存储器)。这是计算机中存放程序(正被执行或运行)和程序正在处理的数据的区域。当你关闭计算机或者将其电源从壁装电源插座拔下时,所有存储在RAM中的程序和数据都将丢失。
(3)辅助存储设备。通常是指硬盘,有时(但很少)是指CD/DVD驱动器。与主存相反,即使计算机断电了,这种类型的存储器也可以长时间保存数据。但是,存放在这种存储器中程序不能直接执行,必须首先转移到更快的内存(主存)中才可以。
(4)输入设备。输入设备是指从计算机外部收集数据并将其输入到计算机中进行处理的所有设备。键盘、鼠标和麦克风都是输入设备。
(5)输出设备。输出设备是指将数据输出到计算机外部的设备。显示器(屏幕)和打印机都是输出设备。
计算机所做的一切都是由软件控制的。软件分为两类:系统软件和应用软件。
系统软件是控制和管理计算机基本操作的程序。例如,系统软件控制计算机的内部操作,管理连接的所有设备,保存数据,加载数据,允许计算机执行其他程序。Windows、Linux、macOS X、Android和iOS都属于系统软件。这类软件的另一个术语叫作“操作系统”。
应用软件是指用于处理日常任务的所有其他程序,如网络浏览器、文字处理器、记事本和游戏等。
当你打开计算机时,主存(RAM)是空的。计算机要做的第一件事就是将操作系统从硬盘加载到主存(RAM)中。
操作系统被加载到主存之后,可以执行(运行)任何你希望运行的程序(应用软件)。通常通过单击、双击或者轻触相应的程序图标完成。例如,假如你单击最喜欢的文本处理器的图标,这个动作命令你的计算机将文字处理程序从硬盘加载(或复制)到主存以便CPU执行它。
请记住!程序存储在辅助存储设备(如硬盘)上。在计算机上安装程序时,该程序实际上将被复制到硬盘上。执行程序时,程序将被从硬盘复制(加载)到主存(RAM)中,然后程序的副本被执行。
提示:术语“执行”和“运行”是相同的意思。
计算机只能执行使用严格定义的计算机语言编写的程序。你不能使用自然语言(如英语或希腊语)编写程序,因为你的计算机无法理解这些语言!
计算机实际上能够理解什么语言呢?计算机可以理解一种称为“机器语言”的特殊的低级语言。在机器语言中,所有语句(或命令)都是由0和1组成的。下面的程序示例使用机器语言编写,用来计算两个数字之和:
0010 0001 0000 0100
0001 0001 0000 0101
0011 0001 0000 0110
0111 0000 0000 0001
震惊吗?别担心,你不需要这样编写程序。希望再也没有人用这种方式编写计算机程序了。现在,所有程序员都是用高级语言编写程序,然后用一种特殊的程序将它们翻译成机器语言。程序员使用两种程序执行翻译过程:编译器和解释器。
编译器是一种程序,可以把用高级语言编写的程序翻译成单独的机器语言程序。然后,程序员就可以随时执行该机器语言程序了。执行翻译后,不需要编译器再次翻译该程序。
解释器是一种程序,同时翻译和执行使用高级语言编写的程序。当解释器读取程序中每条单独的语句时,它将其翻译成机器语言代码,然后直接执行它,对程序中的每条语句都要重复这个过程。
程序员用高级语言编写的语句(通常被称为指令或者命令)称为“源代码”,或简称“代码”。程序员先将源代码输入到一个称为代码编辑器的程序中,然后用编译器将其翻译成机器语言程序,或者用解释器同时翻译和执行程序。Eclipse是一个集成开发环境(IDE)例子,允许程序员编写和执行源代码。你将在第3章了解到更多关于Eclipse的内容。
Python是一种被广泛使用的通用高级计算机编程语言,支持程序员创建应用程序、网页以及许多其他类型的软件。
Python通常被视为脚本语言,尽管实际上官方网站称其是编程语言。事实上,Python的处境比较折中。Python既可以用作脚本语言,也可以用作编程语言。
从技术角度讲,脚本是被解释的而程序是被编译的,但这其实不是它们之间的主要区别,它们之间存在另一个很小但很重要的区别!
用脚本语言[如JavaScript或VBA(Visual Basic for Applications)]编写的脚本主要用于控制另一个应用程序。因此,可以说,JavaScript 在某些方面控制着 Web 浏览器,VBA 控制着Microsoft®Office应用程序,如MS Word或MS Excel。
此外,用程序语言(如C++或C#)编写的程序,是独立于任何其他应用程序而执行的。程序被编译成一组单独的机器语言指令,可以根据用户需要随时独立执行。
提示:Microsoft Office的宏是用VBA编写的脚本,作用是在Microsoft Office中自动执行某些功能。
请记住!脚本需要宿主应用程序才能执行,不能单独执行!
Python是一种众所周知的“高级”计算机语言。它非常灵活,而且功能强大,适用于开发中等规模的应用程序或动态Web网页。它是教授编程的完美语言,尤其适合于入门阶段的教学。它还被广泛用于科学和数值计算领域。Python的编码风格非常易于理解且效率很高。
Python有一项功能是能够与计算机的文件系统进行交互。Python可以创建文件、写入文件或从文件中读取内容,还可以创建目录(文件夹)、复制文件、删除文件、为文件重命名甚至更改文件属性。Python几乎可以执行与文件系统相关的任何任务,使其甚至适用于系统管理任务。 例如,可以编写一个Python程序来备份文件,或者编写一个程序,通过重新格式化其内容来处理文本文件。
此外,Python可以执行系统命令或系统上安装的任何其他程序。因此,用C、C ++、Java或任何其他计算机语言编写和编译的程序可以使用Python执行,并且Python可以使用它们的输出结果。这让我们在无须花时间重写旧程序的情况下,为Python程序添加功能。
有数百万甚至数十亿行代码已经用Python编写,因此复用代码的可能性是巨大的!这就是为什么许多人更喜欢Python而不是其他编程语言。这也是你为何需要学习Python的一个很好的理由!
计算机不懂英语或希腊语等自然语言,因此我们需要用Python等计算机语言与它们进行交流。Python是一种非常强大的高级计算机语言。Python解释器(实际上是编译器和解释器的组合)将Python语言转换为计算机实际可以理解的语言,即“机器语言”。
过去,计算机语言使用解释器或编译器两者中的一个。然而,如今许多计算机语言(包括Python)既使用编译器,也使用解释器。Python编译器将Python语句转换为字节码语句并将其保存在.pyc文件中,然后.pyc文件由适当的解释器执行。解释器通常被称为“Python虚拟机”(Python VM),其任务是将字节码转换为低级机器语言代码,以便在硬件上直接执行。
提示:Python字节码是由Python虚拟机执行的机器语言。
从图2-1中,你可以看到如何将用Python编写的语句编译为字节码,以及如何使用解释器执行字节码。
图2-1 使用Python虚拟机执行Python语句
现在会自然而然地冒出一些问题:为什么执行过程那么麻烦?为什么Python语句被翻译两次?为何不将Python语句直接翻译成低级机器语言代码?答案在于这一切都与效率有关。如今,很少有解释器直接逐行解释代码。几乎所有解释器现在都使用某种中间表示法,原因有如下两个。
(1)可以对中间代码(字节码)进行小的优化。
(2)如果存在与你调用的.py文件同名的.pyc文件,那么Python会自动执行它。这意味着如果存在一个.pyc文件,并且你还没有对源代码进行任何更改,Python可以不必重新编译源代码,从而节省一些时间。