Python程序设计教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-24 14:15:07

点击下载

作者:陈沛强

出版社:人民邮电出版社

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

Python程序设计教程

Python程序设计教程试读:

前言

Python已经成为受欢迎的程序设计语言之一。尤其自2004年以后,Python的使用率更是呈线性增长。随着大数据时代的到来,由于Python语言的简洁性、易读以及可扩展性,用Python做科学计算和大数据分析的研究和商业机构日益增多,在国外更是早已普及,很多国外知名大学率先采用Python教授程序设计课程。国内近几年已经认识到了Python语言的重要性,随着各行业使用Python语言的增多,各高校也开始逐渐开设了该门课程。但目前适合作为国内高校Python语言程序设计课程的教材还比较少,且已有的教材存在如下一些问题。(1)部分教材偏重理论,缺乏实用性。(2)有些教材过于繁难或过于简单,对于大学生的帮助不是很大。(3)现有教材大多面向Python 2.x,而面向Python 3.x的也存在内容不全面的问题。

本书的编写正是基于解决以上的诸多问题,提供一本真正适合于我国高校教学特点的Python程序设计指导。本书以最新的Python 3.x为主线,同时考虑了Python 2.x的特点,不但给与适当的理论阐述,更加注重Python语言不同于Java等其他主流语言特点的论述,更加注重实用性,案例丰富,让读者更易上手。本书内容全面,涉及面向过程、面向对象、数据库编程、窗口编程和Web编程的所有知识和技术。

本书完全采用案例驱动的编写模式,每章都提供了上机练习,这些上机练习也可作为实验课教学内容。本书采用一个项目贯穿始终,可让读者体会到一个项目采用不同技术编程实现的异同,既适合初学者夯实基础,又能帮助Python程序员提升技能,还可以作为Python程序员手边的工具书。

本书的参考学时为48~64学时,建议采用理论实践一体化教学模式,各章的参考学时见下面的学时分配表。学时分配表

由于编者水平和经验有限,书中难免有欠妥和疏漏之处,恳请读者批评指正。编者2018年7月第1章 Python语言简介

本章要点

■ 了解Python语言的发展历史。

■ 掌握Python语言的特点。

■ 了解Python语言的应用。

■ 掌握Python语言中的安装。

■ 学习第一个Python程序。

本章向读者介绍有关Python的背景知识,包括什么是Python以及它的发展历史,然后介绍Python语言的特色、应用领域,最后介绍Python的安装以及第一个Python程序。1.1 什么是Python语言

Python是一种简单易学、面向对象、解释型的计算机程序设计语言,其既具备传统编译型程序设计语言的强大功能,又在某种程度上具备比较简单的脚本和解析型程序设计语言的易用性。Python语法简洁清晰,具有丰富和强大的类库,具有简单易学的面向对象的编程特点,同时还具备可移植、可扩展等特性,所以成为软件公司进行快速开发及科研单位进行科学研究的主流编程语言。它能够很轻松地将用其他语言(特别是C/C++)编写的各种模块联结在一起。比如,先使用Python快速生成程序的原型,然后对其中有特别要求的部分,用更合适的其他语言改写。所以,Python是一种高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性。

Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI(Graphical User Interface,图形用户界面)、数据库、文本等主要内容。用Python开发,许多功能不必从零开始编写,可以直接使用现成的模块。除了内置的基础库外,Python还有大量的第三方库。许多大型网站就是用Python开发的,例如,国外著名的YouTube和Instagram,还有国内的豆瓣,同时还包括Google、Yahoo等大型公司,甚至NASA都大量使用Python。1.2 Python语言的发展历史

Python语言的开发工作由Guido van Rossum开始于1989年末,接下来转移至荷兰的CWI(Centrum voor Wiskunde en Informatica,国家数学和计算机科学研究院)并最终于1991年初公开发表。Guido van Rossum是CWI的一名研究员,其认识到高级教学语言ABC(All Basic Code)因其语言不是开源的,不利于改进或扩展的重大缺点。因此,他决定开发一种可扩展的高级编程语言,为其研究小组的Amoeba分布式操作系统执行管理任务。他从ABC汲取了大量的语法,并从系统编程语言Modular-3借鉴了错误处理机制,开发出了一种能够通过类和编程接口进行扩展的高级编程语言,且将这种新语言命名为Python(原意为大蟒蛇)——来源于BBC(British Broadcasting Corporation,英国广播公司)当时热播的喜剧片Monty Python。

自从1991年初公开发行后,Python开发者和用户社区逐渐长大,Python语言逐渐演变成一种成熟的、并获得良好支持的程序设计语言。2011年1月,Python因在所有编程语言中占有最多市场份额,赢得Tiobe2010年度语言大奖。自从2004年以后,Python的使用率是呈线性增长的趋势。

由于Python语言的简洁、易读以及可扩展性,所以在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python讲授程序设计课程,如卡耐基梅隆大学、麻省理工学院等。另外,众多开源的科学计算软件包都提供了Python的调用接口,如著名的计算机视觉库OpenCV(Open Source Computer Vision,开源计算机视觉库)、三维可视化库VTK(Visualization Tool Kit)、医学图像处理库ITK(Insight segmentation and registration Tool Kit)。而Python专用的科学计算扩展库就更多了,例如NumPy、SciPy和Matplotlib这3个十分经典的科学计算扩展库,都分别为Python提供了数值计算、科学计算以及绘图功能。因此,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表、甚至开发科学计算应用程序。1.3 Python语言的特点

Python之所以具有较强的生命力是因为其拥有不同于(或优于)其他语言的特点,其主要特点如下。

1. 免费开源

Python采取向公众开放源代码的策略,因而广大编程人员可以复制、阅读源代码并对其进行改进和完善,并运用到新的开源软件中。

2. 功能强大

Python是能够进行系统调用的解析型脚本程序设计语言。它具有更高的数据结构,大大减少了项目中不可或缺的“程序框架”的开发时间。Python语言还建立了更为有效的数据类型,比如列表和字典等,在减少开发时间的同时也缩短了代码长度。

3. 易学、易读

相对于其他语言,Python语言关键字少,结构简单、语法清晰,具有很强的伪代码特性。没有其他语言通常用来定义变量、定义代码块等的命令式符号,使得Python代码方便阅读,初学者可以在更短时间内轻松上手。

4. 面向对象

Python支持面向对象编程,同时还支持面向过程的编程。

5. 解释执行

Python是一种解释型的语言,不需要编译成计算机可执行的二进制代码,可以直接从源代码运行程序。Python程序是通过Python解释器解释并执行的,Python解释器把程序的源代码转换成称为字节码的中间形式,然后再将其翻译成计算机语言并执行,使得程序员无需关心程序如何编译、程序中用到的库如何加载等复杂问题。这样,使用Python将会更加简单,也更容易移植。

6. 可扩展性

Python的可扩展性使得程序员能够灵活地附加程序,缩短开发周期。因为Python是基于C语言开发的,所以一般用C/C++来编写Python的扩展功能。

7. 跨平台性

Python具有强大的跨平台性和可移植性,只需要把Python程序复制到另一台计算机上就可以很方便地移植到各种主流的系统平台中。在任何一个平台上用Python开发的通用软件都可以稍做修改或者原封不动地在其他平台上运行。这种可移植性既适用于不同的架构,也适用于不同的操作系统。

Python语言是跨平台的,它可以运行在Windows、MAC和各种Linux/UNIX系统上。在Windows上编写的Python程序,可以轻松方便地移植到MAC和各种Linux/UNIX系统上。

8. 丰富的类库和内存管理器

Python是世界上拥有最大标准库的编程语言。基于庞大的标准库,我们可以用Python编写程序来处理各种工作,包括文档生成、单元测试等功能。在Python的程序开发过程中,Python解析器承担了程序的内存管理工作,使得程序员从内存事务处理中解脱出来,致力于程序功能的实现,从而减少错误,缩短开发周期。1.4 Python语言的应用

Python的应用领域非常广泛,被普遍用于以下领域。

1. 系统编程

提供API编程接口,能够方便地进行系统维护和管理,是很多系统管理员理想的编程工具,是Linux系统下的标志性语言之一。

2. 图形处理

拥有庞大的对诸如PIL、Tkinter等图形类库的支持,能够方便地进行图形处理。

3. 数字处理

NumPy扩展提供了大量与许多标准数学库对应的接口,可以方便地处理数学问题。

4. 文本处理

Python提供了很多模块用于文本处理,如re模块能够处理正则表达式,XML分析模块可进行文本的编程开发。

5. 数据库编程

通过Python DB-API规范模块,可以与MS SQL Server、Oracle、Sybase、DB2、MySQL、SQLite等数据库通信。Python自带的Gadfly模块可提供完整的SQL环境。

6. 网络编程

提供丰富的模块支持Socket编程,能够方便、快速地开发分布式应用程序。

7. Web编程

Python包含了标准Internet模块,可用于实现各种网络任务。它也可使用大量的第三方工具进行完整的、企业级的Web应用开发。

8. 多媒体应用

Python的PyGame模块可用于编写游戏软件,同时,PyOpenGL模块则封装了OpenGL应用程序编程接口,能进行二维和三维图象处理。

另外,Python可广泛应用于科学计算、游戏、人工智能、机器人等领域。1.5 Python的安装

目前,Python有两个版本系列,一个是2.x版,一个是3.x版。这两个版本是不兼容的。由于现在Python正在朝着3.x版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行。

1. Python的获取

我们可以从Python的官方网站下载该软件。打开浏览器,在地址栏输入https://www.python.org/downloads/,可以选择2.x系列的最新的Python2.7.13版本,也可以选择3.x系列的Python3.4版本,本书主要介绍Python3.4版本的使用。另外,软件还分32位和64位版本,本书选择64位版本。

2. Python的安装

在下载目录中找到下载的Python安装文件python-3.4.4.amd64.msi,双击这个文件,开始按安装向导进行安装。

3. 环境配置

把Python系统的安装目录,这里是“C:\Python34”,添加到系统环境变量Path中。

4. Python的启动方式

当正确安装并配置了Python的环境变量后,就可以正常运行Python了。可以通过两种方式启动Python:一种是使用命令行启动,另一种是使用Python的集成开发环境IDLE启动。(1)Python的命令行启动

进入DOS命令行窗口,输入python,出现如图1-1所示界面,则说明已成功在DOS系统下启动Python了。图1-1 DOS系统下启动Python(2)使用Python集成开发环境(IDLE)启动

除了上面的方式,我们还可以使用Python集成开发环境(IDLE)来启动Python。单击“开始”菜单/“所有程序”/Python3.4/IDLE(Python 3.4 GUI-64bit)启动Python,如图1-2所示。图1-2 使用集成开发环境IDLE启动Python1.6 第一个Python程序

接下来我们正式开始编写Python代码。首先,我们通过IDLE启动解析器,然后在交互模式下的提示符“>>>”下输入“print("hello world")”命令行后回车,即可看到IDLE窗口中会输出“hello world”,如图1-3所示。图1-3 第一个Python程序

这行程序是调用了Python内置的一个print函数,在解析器上打印出引号里面的内容。

接下来讲解如何创建源文件编写上面的输出代码并调用该文件执行输出。(1)在IDLE下启动的Python Shell窗口中单击File→New File,打开一个源文件编辑窗口。(2)在这里输入代码并保存为“FirstPython.py”,Python源文件名以“.py”或“.pyw”为后缀名,如图1-4所示。图1-4 第一个Python程序的源文件(3)运行有两种方式。

① 在这个编辑器中单击Run→Run Module或按[F5]键运行程序,运行结果和图1-3类似,也显示在IDLE窗口中。

② 在DOS命令窗口进入到保存“FirstPython.py”文件所在的目录,输入“python FirstPython.py”并回车即可看到运行结果,如图1-5所示。图1-5 在命令行窗口下执行Python程序小结

本章首先讲解了什么是Python及Python语言的发展历史,然后介绍了Python语言的特点和应用,最后讲解了Python的安装并给出了第一个Python程序的创建、编辑和执行过程。习题

1. 安装Python并配置环境变量。

2. 在交互模式下用print函数输出“hello world”。

3. 创建一个Python的源文件,使用print函数输出你的基本信息,包括姓名、性别、年龄、住址等信息,并在DOS系统下执行该文件。第2章 数据类型、运算符及表达式

本章要点

■ 理解Python程序的基本结构。

■ 理解Python的输出格式。

■ 掌握Python的基本数据类型。

■ 掌握Python的输入输出函数。

■ 掌握Python的运算符和表达式。

本章介绍Python程序的基本结构、简单数据类型、输入输出函数和Python的运算符和表达式。在介绍相关知识点的过程中结合例子进行说明,以便让读者更好地理解、掌握知识点。最后,本章末尾给出的练习题将使读者进一步巩固本章重要的知识点。2.1 Python程序基本结构

Python程序结构涉及代码块、注释、语句分隔、语句续行、关键字与大小写等内容。

1. 用缩进表示代码块

在Java、C/C++等语言中,用花括号表示代码块,Python使用缩进(空格)来表示代码块。通常,语句末尾的冒号表示代码块的开始。在if、for、while、函数、类等定义中都会使用到代码块。例如:if x>100: y=x*5-1else: y=0

在包含代码嵌套时,应注意同级代码块的缩进量保持相同(若不同,则可能会导致出错或得到意外的结果)。

2. 代码注释

Python的代码注释有单行注释和多行注释,在运行程序时会忽略被注释的内容。单行注释用“#”表示注释开始,“#”之后的内容不会被执行。单行注释可以单独占一行,也可以放在语句末尾。多行注释是用3个英文的单引号“'''”或双引号“"""”作为注释的开始和结束符号。例如:"""多行注释下面的代码根据变量x的值计算y注意代码中使用缩进表示代码块多行注释结束"""x=5if x>100: y=x*5-1 #单行注释:x>100时执行该语句else: y=0 #x<=100时执行该语句print(y) #输出y

3. 语句续行

通常,Python中的一条语句占一行,没有类似于Java中的分号等语句结束符号。在遇到较长的语句时,可使用语句续行符号,将一条语句写在多行之中。

Python有两种续行方式。一种是使用“\”符号。例如:if x<100 \ and x>10: y=x*5-1else: y=0

应注意在“\”符号之后不能有任何其他符号,包括空格和注释。另一种特殊情况下的续行方式是在使用括号(包括圆括号()、方括号[]和花括号{}等)时,括号中的内容可分多行书写,括号中的空白和换行符都会被忽略。例如:if (x<100 #这是多行语句中的注释 and x>10): y=x*5-1else: y=0

4. 语句分隔

Python使用分号分隔语句,从而将多条语句写在一行。例如:print(100);print(2+3)

如果冒号之后的语句块只有一条语句,Python允许将语句写在冒号之后,同时,冒号之后也可以是分号分隔的多条语句。例如:x=5if x<100 and x>10:y=x*5-1else:y=0;print('x>=100或x<=10')

5. 关键字与大小写

Python语言的基本组成中使用的各种标识符,如if、for、while等,可称为关键字。Python对大小写敏感,关键字和各种自定义标识符在使用时区分大写和小写。2.2 基本输入和输出

在Python程序中,通常用input和print函数来执行基本的输入和输出。2.2.1 基本输入

input函数用于获得用户的输入数据,其基本格式如下。变量=input('提示字符串')

其中,变量和提示字符串均可省略。input函数将用户输入以字符串返回。用户按【Enter】键完成输入,【Enter】键之前的全部字符均作为输入内容。例如:>>> a=input('请输入数据:')请输入数据:'abc' 123,456 "python">>> a'\'abc\' 123,456 "python"'>>>

如果需要输入整数或小数,则需要使用int或float函数进行转换。例如: >>> a=input('请输入一个整数:') 请输入一个整数:5 >>> a #输出a的值,可看到输出的是一个字符串 '5' >>> a+1 #因为a中是一个字符串,试图执行加法运算,所以出错Traceback (most recent call last): File "", line 1, in a+1 #因为a中是一个字符串,试图执行加法运算,所以出错 TypeError: Can't convert 'int' object to str implicitly>>> eval(a)+1 #将字符串转为整数再执行加法运算 6>>> int(a)+1 #将字符串转为整数再执行加法运算 6>>>2.2.2 基本输出

Python 3.x中使用print函数完成基本输出操作。print函数基本格式如下。print([obj1,…][,sep=’’][,end=’\n’],[,file=sys.stdout])

1. 省略所有参数

print函数所有参数均可省略。无参数时,print函数输出一个空行。例如:>>> print() >>>

2. 输出一个或多个对象

print函数可同时输出一个或多个对象。例如:>>> print(123) #输出一个对象123>>> print(123,'abc',45,'book') #输出多个对象123 abc 45 book>>>

在输出多个对象时,对象之间默认用空格分隔。

3. 指定输出分隔符

print函数默认分隔符为空格,可用sep参数指定特定符号作为输出对象的分隔符号。例如:>>> print(123,'abc',45,'book',sep='#') #指定用"#"作为输出分隔符 123#abc#45#book>>>

4. 指定输出结尾符号

print函数默认以回车换行符号作为输出结尾符号,即在输出最后会换行,后面的print函数的输出在新的一行开始。可以用end参数指定输出结尾符号。例如: >>> print('price');print(100) #默认输出结尾,分两行输出 price 100 >>> print('price',end='=');print(100) #指定输出结尾,输出在一行 price=100>>>

5. 输出到文件

print函数默认输出到标准输出流(即sys.stdout)。在Windows命令行输出时,print函数输出到命令行窗口。可用file参数指定输出到特定文件。例如:>>> file1=open('data.txt','w') #打开文件>>> print(123,'abc',45,'book',file=file1) #用file参数指定输出到文件>>> file1.close() #关闭文件>>> print(open('data.txt').read()) #输出从文件中读出的内容123 abc 45 book2.3 数据类型

Python语言的数据类型主要包括整型(int)、浮点型(float)、字符串(string)、布尔型(bool)、列表(list)、元组(tuple)、集合(set)、字典(dictionary)等。这里主要介绍整型、浮点型、布尔型、复数、小数和分数。在介绍这些数据类型之前,先讲解一下变量的基本知识。2.3.1 变量

变量是一种使用方便的占位符,用于引用计算机内存地址。变量代表在内存中具有特定属性的一个存储单元,该单元用来存放数据即变量的值。在程序运行期间,这些值是可以改变的。一个变量应该有一个名字,以便引用。

和其他高级语言一样,在Python语言中,用来对变量、函数、数组等数据对象命名的有效字符序列称为标识符。Python语言规定标识符只能由字母、数字和下画线3种字符组成,且第一个字符必须为字母或下画线。比如,amount、Sum、_rate、User_name、BASE、Li_Wang等为合法标识符,而MR.White、$11、&name、1Varable等为非法标识符。

此外,还要注意,标识符不能和Python提供的关键字相同。下面列出Python 3.x版本的33个关键字。False None True and as assert breakclass continue def del elif else exceptfinally for from global if import inis lambda nonlocal not or pass raisereturn try while with yield

常用的关键字将在后续章节中陆续讲到。

C、C++和Java等都属于静态数据类型语言,即要求变量在使用之前必须声明其数据类型(即变量定义)。Python属于动态数据类型语言,其数据类型处理方式有所不同:变量没有数据类型的概念,数据类型属于对象,类型决定了对象在内存中的存储方式;当在表达式中使用变量时,变量立即被其引用的对象替代,所以变量在使用之前必须为其赋值;变量在第一次赋值时被创建,再次出现时直接使用。例如:>>> x=5 #第一次使用,创建变量x,引用对象5>>> print(x+3) #执行时变量x被对象5替代,语句实际为print(5+3) 8

数据类型决定了程序如何存储和处理数据。数字常量是程序处理的基本数据,接下来通过介绍Python的数字常量了解Python的基本数据类型。2.3.2 数据类型:数字常量和数字对象

1. 整数常量

整数常量就是不带小数点的数。在Python 3.x中,不再区分整数和长整数。一般的整数常量是十进制的,Python还允许将整数常量表示为二进制数、八进制数和十六进制数。二进制数以0b或0B开头,后面跟二进制数字(0和1),如0b101、0B11;八进制数以0o或0O开头,后跟八进制数字(0~7),如0o15、0O123;十六进制以0x或0X开头,后跟十六进制数字(0~9、A~F),字母大小写均可,如0x12AB、0X123。注意:不同进制只是整数的不同书写形式,程序运行时都会处理为十进制数。

可以使用int函数将一个字符串按指定进制转换为整数。int函数基本格式如下。int('整数字符串',n)

int函数按n进制将整数字符串转换为对应的整数。例如:>>> int('11') #十进制11>>> int('11',2) #二进制3>>> int('11',8) #八进制9>>> int('11',10) #十进制11>>> int('11',16) #十六进制17>>> int('11',5) #五进制6

int函数的第一个参数只能是整数字符串,即第一个字符可以是正负号,其他字符必须是数字,能包含小数点或其他符号,否则报错。例如:>>> int('+12')12>>> int('-12')-12>>> int('12.3') #字符串中包含了小数点,错误Traceback (most recent call last): File "", line 1, in int('12.3')ValueError: invalid literal for int() with base 10: '12.3'

Python提供了内置的函数bin(x)、oct(x)、hex(x),用于将整数转换为对应进制的字符串。例如:>>> bin(20) #转为二进制字符串'0b10100'>>> oct(20) #转为八进制字符串'0o24'>>> hex(20) #转为十六进制字符串'0x14'

2. 浮点数常量

12.5、2.、3.0、2.22e+10、1.24E-10等都是合法的浮点数常量。可以用type函数查看数据类型。例如:>>> type(123)>>> type(133.0)

3. 复数常量

复数常量表示为“实部+虚部”形式,虚部以j或J结尾。可以用complex函数创建复数,其基本格式如下。complex(实部,虚部)

例如:>>> complex(3,2)(3+2j)>>> type(3+2j)

4. 布尔类型常量

布尔类型已经成为Python的一种正式的数据类型,其有两个值True和False,分别用于表示逻辑真和逻辑假。True和False是两个预定义的内部变量。从面向对象的角度看,布尔类型是int类型的子类,而True和False是布尔类型的实例。用于计算时,True对应整数1,False对应整数0。例如:>>> type(True)>>> True==1 #测试True是否等于1True>>> True+3 #将True用于数字的加法运算4>>> True is 1 #测试True和1是否是同一个对象False>>> isinstance(True,int) #测试True是否是int的实例True

5. 小数对象

由于计算机中的硬件限制,所以浮点数有一个缺点就是缺乏精度。例如:>>> 0.3-0.1-0.1-0.1 #计算结果不是0-2.7755575615628914e-17>>> 0.3+0.3+0.3+0.1 #计算结果不是1.00.9999999999999999

因此,从Python 2.4起就引入了一种新的数字类型:小数对象。小数可以看作固定精度的浮点数,它有固定的位数和小数点,可以满足精度的要求。(1)创建和使用小数对象

小数对象使用decimal模块中的Decimal函数来创建,所以使用时应先导入函数。例如:>>> from decimal import Decimal #从模块导入函数>>> Decimal('0.3')+Decimal('0.3')+Decimal('0.3')+Decimal('0.1')Decimal('1.0')>>> Decimal('0.3')-Decimal('0.1')-Decimal('0.1')-Decimal('0.1')Decimal('0.0')>>> type(Decimal('1.0'))(2)小数的全局精度

可以使用decimal模块中的上下文对象设置小数的全局精度。例如:>>> Decimal('1')/Decimal('3') #用默认精度计算小数Decimal('0.3333333333333333333333333333')>>> import decimal #导入模块>>> decimal.getcontext().prec=5 #设置全局小数精度为5位有效数字>>> Decimal('1')/Decimal('3')Decimal('0.33333')>>> Decimal('10')/Decimal('3')Decimal('3.3333')(3)小数的临时精度

可以利用with语句创建临时的上下文对象,以设置临时的小数精度。例如:>>> with decimal.localcontext() as local:local.prec=3 #设置临时小数精度为3位有效数字Decimal('1')/Decimal('3') #用临时精度计算Decimal('10')/Decimal('3')Decimal('0.333')Decimal('3.33')>>> Decimal('1')/Decimal('3') #用默认全局小数精度计算(前面例子把默认全局精度改为5)Decimal('0.33333')

6. 分数对象

分数是Python 2.6和3.0版本引入的新类型。分数对象明确地拥有一个分子和分母,且分子和分母保持最简。使用分数可以有效避免浮点数的不精确性。可使用fractions模块中的Fraction函数来创建分数,创建后可用于各种计算。例如:>>> from fractions import Fraction #从模块导入函数>>> x=Fraction(2,8) #创建分数>>> xFraction(1, 4)>>> x+2 #将分数用于计算Fraction(9, 4)>>> x-2Fraction(-7, 4)>>> x*2Fraction(1, 2)>>> x/2Fraction(1, 8)

分数的打印格式和交互模式下的显示有所不同。例如:>>> x #交互模式直接显示分数Fraction(1, 4)>>> print(x) #打印分数1/4

最后,还可以使用Fraction.from_float函数将浮点数转换为分数,例如:>>> Fraction.from_float(1.25)Fraction(5, 4)2.4 运算符

Python语言的运算符主要有以下几类。(1)算术运算符(+、−、*、/、%、**、//)。(2)关系运算符(>、<、==、>=、<=、!=、<>)。(3)逻辑运算符(and、or、not)。(4)位运算符(&、|、^、~、<<、>>)。(5)赋值运算符(=以及复合赋值运算符)。(6)成员运算符(in、not in)。(7)同一运算符(is、is not)。

下面各小节将对这些运算符进行讲解。2.4.1 算术运算符和算术表达式

1. 基本的算术运算符(1)+(加法运算符,或正值运算符,如2+3、+2)。(2)−(减法运算符,或负值运算符,如3−2、−3)。(3)*(乘法运算符,如2*3)。(4)/(除法运算符,如3/2)。(5)%(取模运算符或称求余运算符)。(6)**(幂运算符)。(7)//(取整除运算符,主要用于浮点数,结果为小于商的最大整数)。

例2.1 算术运算符的使用。a=2+3b=3-2c=2*3d=7/2e=7/2.0f=7%2g=7%2.3h=2**3i=3//2.0print("a=%d,b=%d,c=%d,d=%d,e=%g,f=%d,g=%g,h=%d,i=%g"%(a,b,c,d,e,f,g,h,i))

运行结果:>>>a=5,b=1,c=6,d=3,e=3.5,f=1,g=0.1,h=8,i=1

这里需要说明的是,在Python 3.0以前版本中,使用单斜杠(/)除法运算符时,如果相除的两个数都是整数,则相除的结果是小于商的最大整数,如7/2=3;如果相除的两个数中有一个或两个都是浮点数,则返回的结果就是商,如7/2.0=3.5。但在Python 3.0以后就不作区分了,一律都是返回浮点数,但本实例由于加了格式控制符“d=%d,e=%g”,所以输出依然有不同。对于双斜杠(//)除法运算符,无论相除的两个数是整数还是浮点数,其结果都是小于商的最大整数。另外,Python的求余运算符支持浮点数的求余,且余数的符号与除数的符号一致。例如:>>> 5%2,5%-2,-5%2,-5%-2(1, -1, 1, -1)>>> 5%2.0,5%-2.0,-5%2.0,-5%-2.0(1.0, -1.0, 1.0, -1.0)

2. 算数表达式和运算符的优先级

用算术运算符和括号将运算对象连接起来的符合Python语法规则的式子称为Python算术表达式。运算对象包括常量、变量、函数等。例如:>>> a=5;b=3;c=2>>> a+3*b/2-2.57.0

Python语言规定了运算符的优先级。在表达式求值时,按照运算符的优先级别高低次序执行。

3. 计算中的自动数据类型转换

在遇到不同类型的数字参数运算时,Python总是将简单的类型转换为复杂的类型。例如:>>> 2+3.5,type(2+3.5)(5.5, )>>> 2+3.5+(2+3j),type(2+3.5+(2+3j))((7.5+3j), )

Python中的类型复杂度为:布尔类型比整数简单、整数比浮点数简单、浮点数比复数简单。2.4.2 关系运算符和关系表达式

所谓关系运算实际上是比较运算,将两个值进行比较,并判断比较的结果是否符合给定的条件。

1. 关系运算符及其优先级

Python语言提供7种关系运算符。(1)>(大于)。(2)>=(大于或等于)。(3)<(小于)。(4)<=(小于或等于)。(5)==(等于)。(6)!=(不等于)。(7)<>(不等于,和“!=”功能一样,Python3.0后不再使用)。

关于优先级别有以下几点需注意。(1)在Python语言中,所有的关系运算符的优先级别都相同。这不同于C语言。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。

例如,a>b+c等效于a>(b+c);a=b>c等效于a=(b>c)。

例2.2 关系运算符的使用。>>> a=3;b=5;c=7>>> a>bFalse>>> a>> a>=b;a<=b;a==b;a==3;a!=b;a<>b; #<>不再使用SyntaxError: invalid syntax>>> a>=bFalse>>> a<=bTrue>>> a==bFalse>>> a==3True>>> a!=bTrue>>> a>=b;a<=b;a==b;a==3;a!=bFalseTrueFalseTrueTrue>>> a!=b>c #3!=5,返回True,True自动转为1,然后判断1>7,所以返回FalseFalse #在C语言中将返回1,即true,因为>运算符优先级高于!=运算符

2. 关系表达式

用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、字符串表达式)连接起来的式子称为关系表达式。关系表达式的值是一个逻辑值,即True或False。

例2.3 关系表达式。>>> a=3;b=5;c=7;d=9>>> a+b>c+dFalse #相当于(3+5)>(7+9)>>> (a>b)>(c>d)False #相当于(3>5)>(7>9),即0>0>>> "abc">"acd"False #从第一字符开始比较字符的ASCII码,第一个字符相等比较下 #一个字符,直到分出结果

Python允许将连续的多个比较进行缩写,例如:>>> a=1;b=3;c=5>>> a>> a==b>> ac #等价于acFalse2.4.3 逻辑运算符和逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。下面介绍Python语言中的逻辑运算符和逻辑表达式。

1. 逻辑运算符及其优先级

Python语言提供3种逻辑运算符。(1)逻辑非not。例如:>>> not None,not 0 ,not '',not {} #空序列''、()、[],以及空映射{}等均为逻辑假False

上述运算的结果为True、True、True、True。(2)逻辑与and。以类似“x and y”的格式出现。当x、y这两个操作数都为True时,结果才为True,否则为False。当x为False时,and 运算结果肯定为False,Python不会再计算y。例如:>>> True and True,True and False,False and True,False and False

上述逻辑运算的结果为True、False、False、False。(3)逻辑或or。以“x or y”的格式出现,其中,在两个操作数都为False时,结果才为False,否则为True。当x为True时,or 运算结果肯定为True,Python不会再计算y。例如:>>> True or True,True or False,False or True,False or False

上述逻辑运算的结果为True、True、True、False。

在一个逻辑表达式中如果包含多个逻辑运算符,例如not(a>b)and(b>c)or d,可按以下的有效次序进行运算。(1)not→and→or。(2)逻辑运算符低于关系运算符,这和C语言有些不同。在C语言中,逻辑运算符中的not(非)高于算术运算符(即也高于关系运算符)。例如:>>> not 2+3>1 #相当于not ((2+3)>1),即not(5>1),返回FalseFalse #在C语言中则相当于((not 2)+3)>1,返回1(即true)

2. 逻辑表达式

Python的逻辑表达式的值可以是布尔值,也可以是整数、浮点数,甚至还可以是字符串。这与C语言的逻辑表达式的值不同。在C语言中,逻辑表达式的值只能是一个逻辑量1或0。但在判断一个量是否为“真”时,Python和C语言却是一样的,都是以0或空字符(串)代表“假”,以非零或非空字符(串)代表“真”。

例2.4 逻辑表达式示例。>>> a=3;b=5;c=4.5;d="C";e="Python">>> not a #对3(true)取非,所以返回falseFalse>>> a and b #a,b都为true,返回最后一个表达式的值,即5(b)5>>> b and a #a,b都为true,返回最后一个表达式的值,即3(a)3>>> a or b #当运算符为or时,a为true,即使b为true也不再运算,所以整个表3 #达式返回a的值3>>> b and c #b,c都为true,返回最后一个表达式的值,即4.5(c)4.5>>> d and e #d,e都为true,返回最后一个表达式的值,即"Python"(e)'Python'2.4.4 位运算符

所谓位运算,是指进行二进制位的运算,Python语言提供了~、&、^、|、<<、>>等运算符,按操作数的二进制位进行操作。这里的数据只能是整型数据,不能为浮点型或字符串型。

1. 按位取反~

操作数的二进制位中,1取反为0,0取反为1,符号位也参与操作。例如:>>> ~5 #5的8位二进制形式为0000 0101,按位取反为1111 1010,即-6的补码-6>>> ~-5 #-5的8位二进制形式为1111 1011,按位取反为0000 0100,即44

2. 按位与&

将两个操作数按相同位置的二进制位进行与操作,两个位上都是1时,与结果为1,否则为0。例如:>>> 4&5 #4的8位二进制形式为0000 0100,5为0000 0101,所以结果为0000 01004>>> -4&5 #-4的8位二进制形式为1111 1100,5为0000 0101,所以结果为0000 01004

3. 按位异或^

按位异或指位上的数相同时结果为0,否则为1。例如:>>> 4^51>>> -4^5-7

4. 按位或|

按位或指位上的数有一个为1时结果为1,否则为0。例如:>>> 4|55>>> -4|5-3

5. 向左移位<<“x<>> 1<<24>>> -1<<2-4

6. 向右移位>>“x>>y”将x按二进制形式向右移动y位,符号位始终保持不变。向右移动1位等同于除以2。例如:>>> 8>>22>>> -8>>2-22.4.5 赋值运算符和赋值表达式

赋值运算符“=”的作用是将一个数据或者表达式赋给一个变量。如“a=5”的作用是执行一次赋值操作,或者称为赋值运算。在赋值符“=”之前加上其他的运算符,可以构成复合赋值运算符。例如:a+=5相当于a=a+5;a/=a–3相当于a=a/(a–3);a&=3相当于a=a&3。

凡是二目运算符都可以与赋值符一起组成复合赋值运算符。例如+=、-=、*=、/=、<<=、>>=、&=、|=等。

Python除了支持简单赋值,还支持多目标赋值、序列赋值等。多目标赋值指用连续的多个“=”为变量赋值。例如:>>> a=b=c=10 #将10赋值给变量a、b、c>>> a,b,c(10, 10, 10)

序列赋值也可以一次性为多个变量赋值。序列赋值指“=”左侧是元组、列表表示的多个变量名,右侧是元组、列表或字符串等序列表示的值。Python按顺序匹配变量名和值。例如:>>> x,y=1,2 #使用省略圆括号的元组赋值>>> x,y(1, 2)>>> (x,y)=(10,20) #使用元组赋值>>> x,y(10, 20)>>> [x,y]=[30,'abc'] #使用列表赋值>>> x,y(30, 'abc')

当“=”右侧为字符串时,Python会将字符串分解为单个字符,依次赋值给各个变量。此时,变量个数和字符个数必须相等,否则会出错。例如:>>> (x,y,z)='abc' #用字符串赋值>>> x,y,z('a', 'b', 'c')>>> ((x,y),z)='ab','cd' #用嵌套的元组>>> x,y,z('a', 'b', 'cd')

另外,还可以在变量名之前使用“*”,为变量创建列表对象引用。此时,不带星号变量匹配一个值,剩余的值作为列表对象。例如: >>> x,*y='abcd' #x匹配第一个字符,剩余字符作为列表匹配y>>> x,y('a', ['b', 'c', 'd'])>>> *x,y='abcd' #y匹配最后一个字符,剩余字符作为列表匹配x>>> x,y(['a', 'b', 'c'], 'd')>>> x,*y,z='abcde' #x匹配第一个字符,z匹配最后一个字符,剩余字符作为列表匹配y>>> x,y,z('a', ['b', 'c', 'd'], 'e')>>> x,*y=[1,2,'abc','汉字'] #x匹配列表第一个对象,剩余对象匹配y>>> x,y(1, [2, 'abc', '汉字'])2.4.6 其他运算符

除了以上的一些运算符外,Python还支持成员运算符和同一运算符。本小节主要介绍这两个运算符。

1. 成员运算符

成员运算符in的作用是用来判断某个数据或者变量是否在给定的数据对象中,如果在则返回True,否则返回False。而成员运算符not in的作用正好相反。这里的数据对象可以是字符串、列表、元组、字典和集合。关于这些对象将在第4章中介绍。例如: #给定的数据对象是字符串 >>> str="Python" >>> "n" in str True >>> "e" in str False >>> "n" not in str False>>> "e" not in strTrue#给定的数据对象是列表>>> a=1;b=7>>> list=[1,2,3,4,5] #这里定义了一个列表变量list>>> a in listTrue>>> b in listFalse>>> a not in listFalse>>> b not in listTrue>>>

2. 同一运算符

同一运算符is的作用是用来判断两个标识符是否引用自同一个对象,如果是则返回True,否则返回False。而同一运算符(is not)的作用正好相反。例如:>>> a=3;b=3;c=3.5;d=3.5>>> id(a) #id()函数是求标识符的内存地址506111136 #这个内存地址是随机分配的>>> id(b)506111136>>> a is bTrue #内存地址一样,即它们引用自同一个对象,所以返回True>>> a is not bFalse>>> id(c)31457880>>> id(d)31457880>>> c is d #地址相同,说明引用的是同一个对象 True>>> c=3.5>>> d=3.5>>> id(c)49097672>>> id(d)49097600>>> c is d #地址不同,故引用的不是同一个对象False注意通过上面例子可以看出,浮点数的赋值方式不同,对象的引用形式也是不同的。2.4.7 运算符的优先级

在前面各小节中也对一些运算符的优先级进行了介绍,为了让读者更好地掌握运算符的优先级,这里将对常用的运算符优先级进行归纳总结。表2-1列出了常用的运算符及它们的优先级次序。表2-1 常用的运算符及它们的优先级次序(从高到低依次排序)

从上表可以看出,Python的逻辑运算符的优先级低于关系运算符,而关系运算符的优先级低于算术运算符。可以通过括号来改变运算符的执行顺序。小结

本章主要讲解了以下几个知识点。(1)变量的含义。(2)Python的数据类型。本章主要讲解Python的基本数据类型,包括整型、浮点型、布尔型等。(3)Python的输入输出。Python的输入是通过print语句实现的。(4)Python的运算符和运算符优先级。主要包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。习题

一、计算题

1. 请将下面各数分别用八进制数和十六进制数表示。(1)13(2)65(3)129(4)255(5)−123(6)781(7)−1024(8)32678

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载