Python3从入门到实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-11 21:03:58

点击下载

作者:董洪伟

出版社:电子工业出版社

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

Python3从入门到实战

Python3从入门到实战试读:

前言

Python是一种易于学习、功能强大的编程语言。它具有高效的高级数据结构,能够简单有效地实现面向对象编程。Python简单的语法和动态类型,连同解释型特性,使其成为不同平台上脚本处理及快速应用开发的理想语言。此外,Python还是数据分析和人工智能的首选编程语言。

编著者希望编写一本既简明扼要,又深入全面的Python教材,既避免过多的语法细节,又注重语言本身实际使用能力的培养。

本书突出重点,讲解主要的常用语法,而不是面面俱到的语法细节。全书由浅入深,由易到难,尽量用浅显易懂的例子说明语法概念,力求简明扼要,避免空洞的概念和冗长的描述,帮助无编程基础的初学者在较短的时间里快速理解Python语言的核心特征。

只有通过具体、长期的实战训练,才能逐步精通一种编程语言。语法知识可以在短期内学习并理解,但只有经过大量实战训练才能真正熟练掌握一种编程语言。本书准备了游戏编程、信息管理、数据结构、机器学习、强化学习等不同领域的经典实战案例,希望可以通过这些案例,帮助读者消化语法知识、提高学习兴趣,逐步将Python用于解决各种实际问题而不是用于简单的语法练习,希望避免“只会考试而不会编程”的普遍问题。

实战案例涉及一些其他学科的专业知识,初学者或教师可以根据自己的需要选读或选讲实战部分。

本书包含配套学习资源,读者可在本书的github网站(https://hwdong-net.github.io)或登录华信教育资源网(www.hxedu.com.cn)注册后免费下载。

由于编著者水平所限,书中错误之处在所难免,欢迎读者对本书进行批评与指正,共同完善本书内容,使更多的读者受益。编著者

上篇 Python语法与实践

第1章 Python介绍

1.1 程序与编程语言

1.1.1 计算机是什么

计算机是一种根据指令对数据进行处理的通用计算设备。每台计算机都有一个称为“中央处理单元(CPU)”的微处理器芯片用于执行对数据进行处理的指令,不同计算机的指令集是不一样的。

1.计算机指令

计算机接收一系列指令作为输入,然后逐个处理它们,最后输出某些信息以显示它已完成的操作。这一过程类似人们日常生活中通过一系列操作步骤完成一个任务的过程。例如,一个人通过下列步骤完成“做饭”的任务:

虽然人们可以理解自然语言(如英语)中的复杂指令,但计算机只能理解用计算机语言表达的非常简单的机器指令集中的指令。无论多么复杂的计算,在计算机内都会被分解成许多条简单的可逐条执行的机器指令。告诉计算机如何执行复杂任务的指令序列称为程序。

以下是一些简单的计算机指令示例。

• 算术:加、减、乘或除。执行这些指令的操作称为算术操作(运算)。

• 比较:比较两个数字,查看哪个值更大,或者它们是否相等。执行这些指令的操作称为逻辑操作(运算)。

• 分支:跳转到程序的其他指令处,并从那里继续运行程序。执行这些操作的指令称为控制语句。

2.计算机的组成部分

计算机包含以下四种主要类型的组件或设备。

• 输入设备:允许计算机从用户处接收信息的设备,包括键盘、鼠标、扫描仪和麦克风。

• 处理组件:处理信息的计算机组件。计算机的主要处理组件是中央处理单元(CPU),但在现代计算机中也可能有其他处理单元。例如,许多图形卡都带有图形处理单元(GPU),GPU以前只用于处理图形,但现在也可用于处理通用程序。

• 存储组件:存储信息的组件,包括主存储器(也称“内存”)和二级存储器(如硬盘驱动器、CD或闪存盘等外部存储器)。存储组件是存储程序的指令和数据的地方。

• 输出设备:用于向用户显示信息的任何设备,包括显示器、扬声器和打印机。

可以用自动售票机来理解计算机的组件或设备(尽管自动售票机严格地讲并不是计算机)。

• 输入设备:投币口和选择按钮是自动售票机的输入设备。

• 处理组件:当使用者进行选择时,自动售票机执行的操作包括验证是否有满足条件的票;验证身份信息;检查和验证是否收到足够的资金;修改数据库;计算差额。执行所有这些操作的机器部分可以看作处理组件。

• 输出设备:显示结果;打印票据;退回多余资金。

• 存储组件:保存销售数据及价格等信息。

3.中央处理单元(CPU)

CPU是计算机中最重要的部分,是计算机的“大脑”,主要负责计算、处理数据、控制其他设备等工作。它有以下几个重要的子组件。

• 算术/逻辑单元(ALU):执行算术和比较运算。

• 控制单元:确定下一个要执行的指令。

• 寄存器:形成一个高速存储区以保存临时的运行结果。

不同种类的CPU可以处理不同的指令集,如Intel IA-32、x86-64、IBM PowerPC或ARM等。

4.存储器(Memory)

计算机将信息(程序、数据)存储在存储器中,存储器分为两类,主存储器(也称内存)和辅助存储器(也称外存)。

主存储器直接连接CPU(或其他处理单元),通常称为随机存取存储器(RAM)。计算机关闭时,大多数主存储器都会丢失其内容,即具有“易失性”。

可以将主存储器看作一组一排乘一列的存储器单元,每个存储器单元都可以通过其存储器地址寻址。第一个单元的地址为零,并且每个后续单元的地址比它之前的地址多一个,正如一个班级的学生的学号从1开始依次递增一样。每个存储器单元只能保存长度固定的用二进制表示的数值,但CPU可以随时用新的数值替换原有数值。

辅助存储器比主存储器价格便宜,但可以存储更多内容。虽然辅助存储器的存储速度比主存储器慢得多,但它是非易失性的,也就是说,即使在计算机关闭后其保存的信息也会保留,如硬盘和闪存盘。

计算机的操作系统提供操作辅助存储器的高级接口,这些接口允许信息以文件的形式保存在辅助存储器中,并且文件组织呈目录式的层级结构。接口和层级结构通常称为“文件系统”。

1.1.2 计算机编程

1.算法(Algorithms)

算法是完成某个任务或解决某个问题的一系列步骤(指令)。

2.编程和程序

编程就是使用计算机的指令来表示算法,即将算法转换为计算机可以执行的程序。程序就是算法在计算机中的表示和实现。

3.二进制

因为计算机硬件是由很多晶体管元器件组成的,而晶体管元器件只有“开”和“关”两种状态,所以1个晶体管只能表示两个数字:0和1。通过多个表示0或1的晶体管元器件可以组合出更复杂的数值,如整数或字符等。无论多么复杂的程序数据,在计算机硬件中都是以二进制(0和1)的形式表示的。

1个晶体管元器件只能表示1位二进制数(0或1),称为1比特(Bit),简记为b或1位。8个晶体管元器件可以表示8位二进制数字,8即可表示2个不同的数值。8位二进制数,称为1字节(Byte,简记为B)。16个晶体管元器件可以表示16位二进制数,即2B。

4.机器语言(machine language)

计算机中的指令和数据都是用0和1表示的。机器语言是用这种二进制数表示的、计算机能够直接识别和执行的机器指令集合。

例如,下列是将17和20相加的机器指令(采用Intel 8086机器语言,Intel Pentium机器语言的子集):

第一行告诉计算机将17复制到AL寄存器:前4位二进制数(1011)告诉计算机将信息复制到寄存器中,接下来的4位二进制数(0000)告诉计算机使用名为AL的寄存器,最后8位二进制数(0001 0001,表示整数17)为要复制的数。

用机器语言编写程序非常困难,也很难被人们阅读和理解,但在20世纪40年代,第一台计算机的程序员必须这样做,他们通过纸上打孔表示0和1来编写机器语言的程序,因为没有其他选择!

5.汇编语言(assembly language)

为了简化编程过程,人们引入了汇编语言。每条汇编指令对应一条机器语言指令,使人们更容易理解,如上述的机器语言用8086汇编语言中等效的加法程序可写为:

用汇编语言编写的程序不能直接被计算机理解,因此需要翻译步骤。一种叫作“汇编程序”的程序可以将汇编语言编写的程序转化为机器语言程序。

6.高级语言(High-level language)

虽然汇编语言对机器语言有很大的改进,但它仍然很神秘,而且它的级别太低,和机器语言一样,即便是完成最简单的任务也需要很多条指令。于是,人们发明了高级语言,使编程变得更加容易。

在高级语言中,一条指令可以对应多条机器语言指令,高级语言采用类人类的语言表示指令,这使得程序更易于读取和写入。以下是上述代码的Python等效代码:

1.1.3 编译器、解释器和Python语言

用高级语言编写的程序,在计算机执行之前也必须翻译为机器语言。某些编程语言的程序首先被整体翻译为机器语言的程序,并存储在指定文件中,然后再执行,这种语言称为编译型语言。也某些语言的程序语句被逐行翻译后再逐行执行,这种语言被称为解释型语言。Python就是解释型语言。

编译型语言通过一个编译器程序,将编译型语言编写的源文件编译为可执行的二进制程序文件。解释型语言通过一个解释器程序,对解释型语言编写的源文件的每一条语句逐条解释并执行。

• 编译器:编译器是将整个源代码程序一次性全部转换为机器语言代码的工具。转化后的机器语言代码可以直接在计算机上运行。

• 解释器:是“一行一行”地解释执行,即将每条语句翻译成解释器自己的中间代码,然后再由解释器执行这个中间代码。每条语句是在解释器自己的虚拟环境中执行的。

解释器对每条语句逐条转换执行,使初学者很容易知道程序的错误位置。而编译器对整个源程序进行一次性的转换,其优点是可以对代码进行整体的优化,从而提高程序的性能。

要求运行速度高或需要直接操纵硬件的程序通常使用C或C++语言编写。C或C++语言是编译型语言,编译器将C或C++语言程序编译为机器指令时,会对程序做很多细粒度的控制和优化,从而可以提高程序的运行速度,但编译需要耗费时间并且容易出错,而且需要整个程序写完且编译好后才能开始执行程序,而Python作为一种解释型语言,每条语句被逐条解释执行,可以立即发现程序错误,并可以看到程序运行结果,因此学习和编写这种解释型语言更容易。

1.1.4 Python程序开发步骤

利用Python编写程序要经历以下几个步骤。(1)理解问题:如这是一个什么样的问题?输入数据是什么?要产生什么结果?(2)提出算法:解决这个问题的指令(步骤)序列。(3)编写程序:将算法转换成某种编程语言的程序。(4)测试:输入各种可能的不同的数据,检测是否产生预期的结果。

例如,要计算一组数值的平均值,可以按照上述步骤进行。(1)理解问题:这些数值从哪里输入(键盘还是文件)?结果如何显示(屏幕打印输出还是保存到文件)?(2)提出算法:首先用两个数值分别表示总和(sum)及数值的个数(计数器,count),然后将输入的数值累加到总和上,同时累计数值的个数,最后用总和除数值的个数,得到平均值。人们经常以一种“伪代码”的方式描述算法的过程:(3)编写程序:将算法用Python语言表示出来。(4)测试:输入不同的测试数据,查看结果是否正确。输入的数据可以包含非法数据,查看程序能否适当地应对。例如,输入的数据是字符串而不是数值,程序是否会提示等。

1.2 Python语言的主要特征

Python语言是由Guido Van Rossum于1991年发明的高级通用编程语言。所谓高级,是指它隐藏了机器指令的底层细节,并且提供给程序员的是一种人类易于理解的编程语言的语法。所谓通用,是指它可以开发各类应用程序。和其他高级编程语言,如C、C++、Java等不同,Python语言以其简单易懂和编程效率高而著名。

Python语言的主要特征如下。

1.简单易学

Python语言简单,特别适合初学者学习和使用,使初学者可以把精力集中在问题本身和求解方法上,而不用担心语法、类型等外在因素。Python语言对代码的逐句解释执行方式,可以帮助初学者非常容易发现程序错误。正是由于其简单性,国内外很多教育机构都将Python语言作为中小学的首选编程语言。

2.编程效率高

同一个任务,用Python语言编写的代码往往是用其他编程语言所编写的代码的代码量的几分之一甚至几十分之一。例如,有时,用其他编程语言可能需要编写几百行甚至几千行代码,用Python可能只需编写几行代码。

3.跨平台

Python语言是一个跨平台的编程语言,用该语言编写的程序可以在各种操作系统,如Windows、UNIX/Linux、Mac,甚至手机操作系统,如Android等,平台上运行。

4.解释性语言

Python语言是一个解释型编程语言,而C、C++则是编译型编程语言。

5.大量的库

Python语言提供大量丰富的库,包括Python语言自带的标准库和第三方的库。利用这些大量优秀的库,可以避免程序员重复“造轮子”。

由于Python语言的这些优点,Python语言不再是程序员的专利,各行各业的人都在使用Python语言处理他们的数据和业务。特别是处理大数据和人工智能,都普遍采用Python语言作为其编程开发的语言。目前,世界范围内掀起了学习Python语言的热潮,从计算机专业到其他专业的研究开发人员,从大学生到中小学生,都在学习Python语言,国内许多大学、中学、小学都已经将Python语言作为首选编程语言。教育部考试中心于2017年10月11日发布了《关于全国计算机等级(NCRE)体系调整》的通知,决定自2018年3月起,在计算机二级考试加入“Python语言程序设计”科目。

在2017年IEEE编程语言排行榜中,Python语言排名第一。

1.3 Python开发环境及安装方式

1.3.1 安装Python

Python开发环境的安装方式通常有两种方式,原生安装和工具包安装。

1.原生安装

原生安装是指只安装相应平台最基本的Python解释器。在https://www.python.org/downloads下载Python安装程序并运行即可。

如图1-1所示,在安装过程中勾选“Add Python 3.6 to PATH”,安装程序会自动将Python解释器的路径添加到系统路径。

安装完成后,可以打开终端窗口,在其中输入“python”就可以打开Python解释器,系统将显示Python的版本信息:

原生安装只安装最基本的Python解释器和一些自带的Python库。图1-1 Python原生安装

2.工具包安装

一些安装工具包中,如Anaconda等,除包含Python官方的Python解释器及库外,还包含许多常用的第三方Python库,极大地方便了Python及第三方库的安装。

上述安装过程都是在Windows环境,如果在UNIX/Linux或Mac环境,则请读者自行在网上搜索安装方法。

1.3.2 Python开发环境

可以在Python命令行直接编写交互式Python程序,也可以用操作系统自带的文本编辑工具(如Windows的记事本、UNIX/Linux上的vi或vim)或流行的文本编辑工具(如sublime)编写Python程序,然后在Python的命令行运行这些Python程序。

但程序员更多采用以下Python编程环境。

• 将流行的文本编辑器,如sublime、atom、Visual Code等,进行简单的配置,使其可以编辑代码,然后直接在编辑器中调用Python解释器执行Python程序。读者可以自行在网络上搜索具体配置过程。

• 使用集成开发环境,如Pycharm,进行Python程序的开发。

• 使用Jupyter Notebook。

Jupyter Notebook可以将浏览器当作Python程序的编辑工具,不仅可以在其中编写代码,还可以使用丰富的格式单元(markdown)编写丰富的文字、公式等,从而将代码和文章有机地结合在一个文档中。因此,Jupyter Notebook是Python程序员使用最多的用于代码编写和记录思想的工具。Anaconda安装程序已经自带了Jupyter Notebook工具。如果是原生安装的Python,则只要在Python提示符下输入:

本书配套的视频教程采用Jupyter Notebook作为教学环境。

1.4 Python解释器

Python解释器用于运行Python命令(程序),主要有两种模式,交互式解释执行和运行脚本文件。

1.4.1 交互式解释执行模式

1.交互式解释执行模式应用方法

只要在命令行输入“python”就可进入交互解释执行模式。在此模式下,在Python解释器的提示符>>>后可以直接输入Python的指令(也称“语句”),解释器将会解释执行这条语句。例如,输入1+1:

屏幕窗口立即输出了计算结果2。

接着再输入50-5/6:

继续输入"hello world!":

这里我们输入了用双引号括起来的一串字符,输出的是以双引号或单引号括起来的同样的一串字符。这种以单引号或双引号括起来的字符序列叫作“字符串”。

再继续输入下列语句:

屏幕窗口将输出一串字符hello world!。

2.如何退出Python解释器

在Windows平台输入【Ctrl+Z】,在Linux、UNIX或Mac平台输入【Ctrl+D】,将退出Python解释器。

1.4.2 函数

上例代码调用了Python的一个叫作print()的内置函数,用于在显示窗口输出信息,将双引号括起的一个字符串“hello world!”传给print,即放在print后面的圆括号()里,函数print()将在显示窗口输出字符的内容。我们习惯称print()为打印(或输出)函数。

注意

函数print()输出的字符串没有包括字符串的开始和结束位置的单引号或双引号,开始和结束位置的单引号或双引号只是用来表示一个字符串的,它们本身并不是字符串的内容。

需要说明的是,Python的函数并不是Python语言的语法组成部分,函数实际上是一组语句的名字,程序员可以用Python语句编写各种各样的函数,每个函数完成一个特定的专门的工作。Python语言的实现者除提供了一个执行Python语句的解释器外,通常会也提供一些最常使用的函数,它们被称为“内置函数”。程序员也可以定义自己的函数,它们和内置函数在定义和使用上没有区别。通过将一组排列好的指令语句用函数名命名,就可以多次通过这个函数名去调用这个函数名指示的这组指令语句(也称代码块或程序块),从而可以避免多次重复编写同样的指令语句,极大地提高了编程效率。

定义每个函数时,都会说明该函数可以接收什么样的数据。在调用该函数时,应该按照该函数的规范传递合适的数据给这个被调用的函数。这些传递给函数的数据称为“实际参数”,这些“实际参数”都是放在函数名后的圆括号里传递给函数的。例如,print("hello world!")就是通过圆括号传递给函数print()一个双引号括起来的字符串。

如果字符串没有用双引号或单引号括起来,则会出错。例如:

同样,调用函数时,如果参数不是放在函数名后的圆括号里传递给该函数,则也会出错:

再看下面的例子:

两个函数print()输出的都是同样的字符串("1+2"和'1+2'),但是,如果输入print(1+2),则:

输出的结果是3而不是字符串。

Python的语句一般写在一行里,如果一条语句要写在多行,则可以在每行的结束位置添加一个特殊的斜杠符号\,则表示Python语句将继续包含后面的行。例如:

如果写成下面的形式,则会出错:

如果字符串中内容要写在多行,则也需要添加斜杠符号\。例如:

函数print()可以有多个输出项,这些输出项在输出时,输出项之间以空格隔开。

函数print()默认输出后换行,可以通过设置关键字参数end的值改变其行为。例如:

即在每个print语句的后面输出的是空格而不是换行。

1.4.3 运行脚本文件模式

可以将多个Python指令(命令)放在一个后缀为.py的文本文件中,这种文件称为Python脚本文件(script)。例如,用文本编辑工具,如“记事本”,编辑下列代码:

并保存在命名为“first.py”的文件中。在命令行窗口输入:

Python是解释器程序,因此解释器将解释执行first.py中的Python指令,并输出如下信息:

注:

• 函数print()默认输出后换行。

• 函数print()可以输出多个量,这些量以逗号隔开,如print("hello","world!")输出了两个字符串。

• 后缀为.py的脚本文件也称为模块(module)。

1.4.4 语句和注释

Python的命令如1+2或print("hello,world")称为语句(也称代码)。

除语句外,在编写Python脚本文件时,我们经常会对程序添加一些说明或注解,这些说明或注解称为“注释”,它们本身并不是程序语句,其作用是为了帮助他人阅读或今后自己回顾程序。

添加注释的方法很简单,就是在一行文字的最前面加上一个特殊符号#,该行文字就成了注释。例如:

执行该脚本的结果:

在每一行里,#后面的文字都是注释,如上例程序的第1、2行文字和第4行#后面的文字,都是程序的注释。删除注释对程序没有任何影响,但“为程序添加注释”是一个良好的编程习惯,不仅可以帮助他人阅读理解程序,也有助于自己今后回顾这些程序。

总结

• 编写Python程序的两种模式,交互式解释执行和运行脚本文件。

• 函数及函数调用的概念。

• 语句和注释的区别。

1.5 数和字符的表示

1.5.1 数的表示

1.十进制和二进制

程序的数据和代码在计算机内部都是以0、1表示的。而在编程语言中,数的表示方式有多种。例如,可以用日常生活中常用的“十进制(Decimal)”,即用10个不同的数字0、1、2、...、9表示一个数。对于小于10的数,可以直接用这10个不同数字中的一个来表示或区分就可以了,即1位数字就可以表示不超过10的数。但如果一个数超过了10,就需要用两位数字、三位数字等多位数字来表示,即用“逢十进一”的多位数表示。例如,一个整数329意思是“3个100”i加“2个10”加“1个9”,可以表示成10的多项式:210329=3×100+2×10+9=3×10+2×10+9×10

但在计算机中,由于计算机硬件,即晶体管元器件,只有“开”和“关”两种状态,也就是在说,1个晶体管元器件的开和关状态只能区分两种不同情况,相当于只能表示0和1两个数字。如果要表示更大的数字,则可以采用“逢二进一”的方法,即采用多个晶体管元器件,即多个0和1的排列来表示一个很大的数字。这种用两个数字0和1表示数的方法就称为“二进制”表示法。例如,二进制数1011可i以表示成2的多项式:32101011=1×2+0×2+1×2+1×2=1×8+0×4+1×2+1×1=11

即相当于十进制数11。

1位二进制位经常也称为1比特(Bit,简记为b),而8位二进制位经常也称为1字节(Byte,简记为B)。8位二进制数对应的十进制数如表1-1所示。

使用前7位二进制位可以表示0到127共128个不同数字,使用全8部8位二进制位可以表示一共256,即2个不同的数。如果有n位二进nn制位,则可以表示2个不同的数,如正整数0到2-1。

2.十六进制

当处理更大的二进制数时,则二进制数的位数太多不方便使用。例如:

如果表示成十进制数11917797,则只要8位。然而,十进制数在某些情况下也不方便,如希望将从右往左的第17位二进制位设置成1,就很难用十进制做到。解决方法就是采用“十六进制”,即用十六个不同的数字来表示一个数,即用十进制的10个数字0、1、2、…、9加上英文字母的前6个字母A(a)、B(b)、C(c)、D(d)、E(e)、F(f)来分别表示一个数(英文字母不区分大小写)。如表1-2所示是十六进制、十进制和二进制之间的对应关系。

因为1位十六进制数对应4位二进制数,所以可以将任何1个二进制数按照4位一组的方式以十六进制形式表示。例如:

对应十六进制表示法,很简单就可以写出来:

对这种十六进制数可以很容易地设置其对应二进制的第17位为1(思考一下?),也可以将十六进制数采用如下方式计算出对应的十进制数的值:543210b×16+5×16+d×16+9×16+e×16+5×16表1-1 8位二进制数对应的十进制数

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载