Python语言程序设计刘卫国全套教案课件_第1页
Python语言程序设计刘卫国全套教案课件_第2页
Python语言程序设计刘卫国全套教案课件_第3页
Python语言程序设计刘卫国全套教案课件_第4页
Python语言程序设计刘卫国全套教案课件_第5页
已阅读5页,还剩607页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python语言程序设计第1章Python语言基础Python语言的发展与特点Python程序的运行环境Python数据类型各种形式Python数据的表示方法Python的基本运算1.1.1Python语言的发展历史Python由荷兰的GuidovanRossum设计。Python第一个版本于1991年初公开发行。。Python2.0于2000年10月发布,增加了许多新的语言特性。Python3.0于2008年12月发布,此版本不完全兼容Python2.0,导致Python

2.0与Python3.0不兼容。1.1Python语言概述1.1.2Python语言的特点1.Python语言的优势(1)简单易学。Python语言语法结构简单,组成一个Python程序也没有太多的语法细节和规则要求,“信手拈来”就可以组成一个程序。(2)程序可读性好。通过强制程序缩进,Python语言确实使得程序具有很好的可读性,同时Python的缩进规则是也有利于程序员养成良好的程序设计习惯。(3)丰富的数据类型。除了基本的数值类型外,Python语言还提供了字符串、列表、元组、字典和集合等丰富的复合数据类型。(4)开源的语言。各种社区提供了成千上万不同功能的开源函数模块,而且还在不断地发展,这为基于Python语言的快速开发提供了强大支持。(5)解释型的语言。用Python语言编写的程序不需要编译成二进制代码,而可以直接运行源代码。。(6)面向对象的语言。Python语言既可以面向过程,也可以面向对象,支持灵活的程序设计方式。2.Python语言的局限性Python程序的运行速度比较慢。Python用代码缩进来区分语法逻辑的方式可能给初学者带来困惑,最常见的情况是Tab和空格的混用会导致错误,而这是用肉眼无法分别的。1.1.3Python语言的应用领域1.Windows系统编程

在Windows系统下,通过使用pywin32模块提供的WindowsAPI函数接口,就可以编写与Windows系统底层功能相关的Python程序。利用py2exe模块可以将Python程序转换为.exe可执行程序,使得Python程序可以脱离Python系统环境来运行。2.科学计算与数据可视化

Python中用于科学计算与数据可视化的模块有很多,例如NumPy、SciPy、SymPy、Matplotlib、Traits、TraitsUI、Chaco、TVTK、Mayavi、VPython、OpenCV等,涉及的应用领域包括数值计算、符号计算、二维图表、三维数据可视化、三维动画演示、图像处理以及界面设计等。

3.数据库应用

Python数据库模块有很多,例如,可以通过内置的sqlite3模块访问SQLite数据库,使用pywin32模块访问Access数据库,使用pymysql模块访问MySQL数据库,使用pywin32和pymssql模块来访问SQLSever数据库。4.多媒体应用

PyMedia模块是一个用于多媒体操作的Python模块,可以对包括WAV、MP3、AVI等多媒体格式文件进行编码、解码和播放;PyOpenGL模块封装了OpenGL应用程序编程接口,通过该模块可在Python程序中集成二维或三维图形;PIL(PythonImagingLibrary,Python图形库)为Python提供了强大的图像处理功能,并提供广泛的图像文件格式支持。5.网络应用

Python语言提供了socket模块,对Socket接口进行了二次封装,支持Socket接口的访问;还提供了urllib、cookielib、httplib、scrapy等大量模块,用于对网页内容进行读取和处理,并结合多线程编程以及其他有关模块可以快速开发网页爬虫之类的应用程序;可以使用Python语言编写CGI程序,也可以把Python程序嵌入到网页中运行;Python语言还支持Web网站开发,比较流行的开发框架有web2py、django等。6.电子游戏应用

Pygame就是用来开发电子游戏软件的Python模块,在SDL库的基础上开发,可以支持多个操作系统。使用Pygame模块,可以在Python程序中创建功能丰富的游戏和多媒体程序。1.2.1Python系统的下载与安装

从Python官网下载Python系统文件,下载地址为/downloads/。选择基于Windows操作系统的当时最新版本Python3.5.1进行下载。

下载完成后,运行系统文件python-3.5.1.exe,进入Python系统安装界面。1.2Python语言的开发环境

选中“AddPython3.5toPATH”复选框,并使用默认的安装路径,单击“InstallNow”选项,这时进入系统安装过程,安装完成后单击close按钮即可。如果要设置安装路径和其他特性,可以选择“Customizeinstallation”选项。1.2.2系统环境变量的设置

如果在安装时选中了“AddPython3.5toPATH”复选框,则会自动将安装路径添加到环境变量Path,否则可以在安装完成后添加。

添加路径的方法为:在Windows桌面右击“计算机”图标,在弹出的快捷菜单中选择“属性”命令,然后在打开的对话框中选择“高级系统设置”选项,在打开的“系统属性”对话框中选择“高级”选项卡,单击“环境变量”按钮,打开“环境变量”对话框,在“系统变量”区域选择“Path”选项,单击“编辑”按钮,将安装路径添加到Path中,最后单击“确定”按钮逐级返回。1.2.3Python程序的运行1.命令行形式的Python解释器(1)在Windows系统的桌面,选择“开始”→“所有程序”→“Python3.5”→“Python3.5(32-bit)”命令。(2)在Windows桌面单击“开始”按钮,选择“运行”选项,在弹出的“运行”对话框中选择Python启动文件的路径和文件名python.exe,单击“确定”按钮。(3)可以到Python的安装文件夹下,通过双击运行python.exe文件来启动命令行的Python解释器,或在Python图标上单击右键,在弹出的菜单中选择“创建快捷方式”命令,之后把建立的快捷方式图标复制到桌面上,之后通过快捷方式来启动命令行的Python解释器。

启动命令行形式的Python解释器后出现相应的程序窗口,如图所示。其中“>>>”是Python解释器的提示符,在提示符后面输入语句,Python解释器将解释执行。还可以在Windows命令提示符(即DOS操作界面)下直接运行python.exe文件,来启动命令行的Python解释器,程序窗口如图所示。按Ctrl+Z及Enter键,或输入quit()命令,或单击Python命令行窗口的关闭按钮,均可退出Python解释器。2.图形用户界面形式的Python解释器在Windows系统的桌面,选择“开始”→“所有程序”→“Python3.5”→“IDLE(Python3.532-bit”来启动图形用户界面形式的Python解释器,其窗口如图所示。

在Python解释器图形用户界面窗口,选择“File”→“Exit”命令,或按Ctrl+Q键,或输入quit()命令,或单击Python图形用户界面窗口的关闭按钮,均可退出Python解释器图形用户界面窗口。3.Python的命令执行方式

启动Python解释器后,可以直接在其提示符(>>>)后输入语句。例如,先在提示符>>>后输入一个输出语句,下一行将接着输出结果。>>>print("Hello,World!")Hello,World!>>>print(1+3/4)1.754.Python的程序方式(1)在Python解释器的程序编辑窗口执行Python程序。在Python解释器图形用户界面窗口,选择“File”→“NewFile”命令,或按Ctrl+N键,打开程序编辑窗口,如图所示。

在程序编辑窗口输入程序的全部语句,例如输入语句:print("Hello,World!")

语句输入完成后,在Python程序编辑窗口选择“File”→“Save”命令,确定保存文件位置和文件名,例如e:\mypython\hello.py。

在Python程序的编辑窗口选择“Run”→“RunModule”命令,或按F5键,运行程序并在Python解释器图形用户界面窗口中输出运行结果。(2)在Python解释器提示符下运行Python程序在Python解释器(命令行或图形用户界面)的提示符下执行import语句来导入程序文件。import语句的作用是将Python程序文件从磁盘加载到内存,在加载的同时执行程序。例如,运行hello.py,可以使用下面的语句。>>>importhello注意,模块文件名不加扩展名“.py”。(3)Windows命令提示符下运行Python程序在Windows命令提示符下切换到Python程序文件所在文件夹,因为程序文件位于e:\mypython文件夹下,所以可以先选择e:盘并设置其当前文件夹为e:\mypython。然后,在Windows命令提示符下输入python,后跟要执行的程序文件名即可,如图所示。1.常量

在程序运行过程中,其值不能改变的数据对象称为常量(constant)。常量按其值的表示形式区分它的类型。例如,0、435、-78是整型常量,-5.8、3.14159、1.0是实型常量(也称作浮点型常量),'410083'、'Python'是字符串常量。1.3常量与变量2.变量的一般概念

在高级语言中,变量(variable)可以看作是一个特定的内存存储区,该存储区由一定个数字节的内存单元组成,并可以通过变量的名字来访问。

高级语言中的变量具有变量名、变量值和变量地址三个属性。

变量在它存在期间,在内存中占据一定的存储单元,以存放变量的值。3.Python变量(1)变量的数据类型

Python语言是一种动态类型语言,变量的数据类型是在给变量赋值时确定,对变量的每一次赋值,都可能改变变量的类型。例如:可以使用Python内置函数type()来查询变量的类型。例如:(2)变量与地址的关系

Python语言采用基于值的内存管理方式,不同的值分配不同的内存空间。这可理解为,Python变量并不是某一个固定内存单元的标识,而是对内存中存储的某个数据的引用(reference),这个引用是可以动态改变的。4.Python标识符

在Python中,标识符由字母、数字和下划线(_)组成,但不能以数字开头,标识符中的字母是区分大小写的。例如,abc、a_b_c、Student_ID都是合法的标识符,sum、Sum、SUM代表不同的标识符。单独的下划线(_)是一个特殊变量,用于表示上一次运算的结果。

5.Python关键字

所谓关键字(keyword),就是Python语言中事先定义的、具有特定含义的标识符,有时又称保留字。关键字不允许另作它用,否则执行时会出现语法错误。可以在使用import语句导入keyword模块后使用print(keyword.kwlist)语句查看所有Python关键字。语句如下。>>>importkeyword>>>print(keyword.kwlist)1.4.1数值类型1.整型数据

整型数据即整数,不带小数点,但可以有正号或负号。在Python中,整型数据的值在计算机内的表示不是固定长度的,只要内存许可,整数可以扩展到任意长度,整数的取值范围几乎包括了全部整数(无限大),这给大数据的计算带来便利。

1.4Python数据类型Python的整型常量有4种表示形式:(1)十进制整数。(2)二进制整数。它以0b或0B(数字0加字母b或B)开头,后接数字0,1的整数。(3)八进制整数。它是以0o或0O(数字0加小写字母o或大写字母O)开头,后接数字0~7的整数。(4)十六进制整数。它是以0x或0X开头,后接0~9和A~F(或用小写字母)字符的整数。2.浮点型数据浮点型数据表示一个实数,有两种表示形式:(1)十进制小数形式。它由数字和小数点组成,如3.23、34.0、0.0等。浮点型数据允许小数点后面没有任何数字,表示小数部分为0,如34.表示34.0。(2)指数形式。指数形式即用科学计数法表示的浮点数。例如,45e-5、45e-6、9.34e2是合法的浮点型常量,分别代表45×10-5、45×10-6、9.34×102。

3.复数型数据

复数类型数据的形式为:a+bJ

其中a是复数的实部,b是复数的虚部,J表示-1的平方根(虚数单位)。J也可以写成小写j,注意不是数学上的i。

可以通过x.real和x.imag来分别获取复数x的实部和虚部,结果都是浮点型。1.4.2字符串类型1.Python标准字符串

在Python中定义一个标准字符串可以使用单引号、双引号和三引号(三个单引号或三个双引号),这使得Python输入文本更方便。例如,当字符串的内容中包含双引号时,就可以用单引号定义,反之亦然。

用单引号或双引号括起来的字符串必须在一行内表示,这是最常见的表示字符串的方法。而用三引号括起来的字符串可以是多行的。2.转义字符

转义字符以反斜杠“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符,主要用来表示那些用一般字符不便于表示的控制代码。例如,“\n”表示以后的输出从下一行开始;“\r”表示对当前行作重叠输出(只回车,不换行);字符“\t”是制表符,其作用是使当前输出位置横向跳至一个输出区的第一列。3.基本的字符串函数(1)eval()函数

与字符串有关的一个重要函数是eval,其调用格式为:

eval(字符串)

eval()函数的作用是把字符串的内容作为对应的Python语句来执行。(2)len()函数

len()函数返回字符串的长度,即字符串中所包含的字符个数,其调用格式为:

len(字符串)1.4.3布尔类型

在Python中,布尔型数据有True和False,分别代表逻辑真和逻辑假。

值为真或假的表达式称为布尔表达式,Python的布尔表达式包括关系运算表达式和逻辑运算表达式,它们通常用来在程序中表示条件,条件满足时结果为True,不满足时结果为False。

在Python中,逻辑值True和False实际上是分别用整型值1和0参与运算。例如:>>>x=False>>>x+(5>4)11.4.4复合数据类型

列表、元组、字典和集合类型的数据包含多个相互关联的数据元素,所以称它们为复合数据类型。字符串其实也是一种复合数据,其元素是单个字符。

列表、元组和字符串是有顺序的数据元素的集合体,称作序列(sequence)。序列可以通过各数据元素在序列中的位置编号(索引)来访问数据元素。字典和集合属于无顺序的数据集合体,不能通过位置编号来访问数据元素。1.列表

列表(list)是写在中括号之间、用逗号分隔的元素序列,元素的类型可以不相同,可以是数字、单个字符、字符串甚至可以包含列表(所谓嵌套)。例如:>>>mlist=['brenden',45.3,911,'john',32]与Python字符串不同的是,列表中的元素是可以改变的。例如:>>>a=[1,2,3,4,5,6]>>>a[0]=9>>>a[9,2,3,4,5,6]2.元组

元组(tuple)是写在小括号之间、用逗号隔开的元素序列。元组中的元素类型也可以不相同。元组与列表类似,不同之处在于元组的元素不能修改,相当于只读列表。例如:>>>mtuple=('brenden',45.3,911,'john',32)要注意一些特殊元组的表示方法。空的圆括号表示空元组。当元组只有一个元素时,必须以逗号结尾。任何一组以逗号分隔的对象,当省略标识序列的括号时,默认为元组。例如:>>>2,3,4(2,3,4)元组与字符串类似,元素不能二次赋值。其实,可以把字符串看作一种特殊的元组。元组和列表有几点重要的区别。列表元素用中括号[]括起来,且元素的个数及元素的值可以改变。元组元素用小括号()括起来,且不可以更改。元组可以看成是只读的列表。3.字典字典(dictionary)是写在大括号之间、用逗号分隔的元素集合,其元素由关键字(key,也称作键)和关键字对应的值(value)组成,通过关键字来存取的字典中的元素。列表和元组是有序的对象结合,字典是无序的对象集合。字典是一种映射类型(mappingtype),它是一个无序的“关键字:值”对集合。关键字必须使用不可变类型,也就是说列表和包含可变类型的元组不能做索引关键字。在同一个字典中,关键字还必须互不相同。例如:>>>dict={'name':'brenden','code':410012,'dept':'sales'}4.集合集合(set)是一个无序且包含不重复元素的数据类型。基本功能是进行成员关系测试和消除重复元素。可以使用大括号或者set()函数创建集合类型,注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。>>>student={'Tom','Jim','Mary','Tom','Jack','Rose'}

Python的标准库包含很多模块,每个模块中定义了很多有用的函数,这些函数称为系统函数。例如,数学库模块(math)提供了很多数学运算函数,复数模块(cmath)提供了用于复数运算的函数,随机数模块(random)提供了用来生成随机数的函数,时间(time)和日历(calendar)模块提供了能处理日期和时间的函数。1.5常用系统函数在调用系统函数之前,先要使用import语句导入相应的模块,格式如下:import模块名还有一种导入模块的方法,格式如下:from模块名import函数名如果希望导入模块中的所有函数定义,则函数名用“*”。格式如下:from模块名import*1.5.1常用模块函数1.math模块函数

math模块主要处理数学相关的运算。2.cmath模块函数

cmath模块函数跟math模块函数基本一致,包括圆周率、自然对数的底,还有复数的幂指数、对数函数、平方根函数、三角函数等。cmath模块函数名和math模块函数名一样,只是math模块对实数运算进行支持,cmath模块对复数运算进行支持。3.random模块函数(1)随机数种子(2)随机挑选和排序(3)生成随机数4.time模块函数

例如,time()函数返回当前时间的时间戳。5.calendar模块函数

日历(calendar)模块提供与日历相关的功能。在默认情况下,日历把星期一作为一周的第一天,星期日为最后一天。要改变这种设置,可以调用setfirstweekday()函数。1.5.2常用内置函数

Python内置函数包含在模块builtins中,该模块在启动Python解释器时自动装入内存,而其他的模块函数都要等使用import语句导入时才会装入内存。内置函数随着Python解释器的运行而创建,在程序中可以随时调用这些函数。前面用到的print()函数、type()、id()函数都是常见的内置函数。1.range()函数range()函数的调用格式是:

range([start,]end[,step])

range()函数产生的数字序列从start开始,默认是从0开始;序列到end结束,但不包含end;如果指定了可选的步长step,则序列按步长增加,默认为1。例如:>>>range(2)#产生可迭代对象range(0,2)2.数值运算函数Python有些内置函数用于数值运算。abs(x):返回x的绝对值,结果保持x的类型。x为复数时返回复数的模。pow(x,y[,z]):省略z时,返回x的y次幂,结果保持x或y的类型。如果使用了参数z,其结果是x的y次方再对z求余数。round(x[,n]):用于对浮点数进行四舍五入运算,返回值为浮点数。它有一个可选的小数位数参数。divmod(x,y):把除法和取余运算结合起来,返回一个包含商和余数的元组。3.Python系统的帮助信息查看Python帮助信息可以使用内置函数dir()和help()。dir()函数的调用方法很简单,只需把想要查询的对象加到括号中就可以了,它返回一个列表,其中包含要查询对象的所有属性和方法。查看某个对象的帮助信息可以用help()函数。1.6.1算术运算1.算术运算符与算术表达式Python的算术运算符有:+(加)、-(减)、*(乘)、/(除)、//(整除)、%(求余)、**(乘方)1.6基本运算

/、//和%运算符都是做除法运算,其中“/”运算符做一般意义上的除法,其运算结果是一个浮点数,即使被除数和除数都是整型,也返回一个浮点数;“//”运算符做除法运算后返回商的整数部分。如果分子或者分母是浮点型,它返回的值将会是浮点类型;“%”运算符做除法运算后返回余数。

“**”运算符实现乘方运算,其优先级高于乘除运算,乘除运算优先级高于加减运算。Python表达式书写练习:2.浮点数的计算误差

Python中能表示浮点数的有效数字是有限的,而在实际应用中数据的有效位数并无限制,这种矛盾,势必带来计算时的微小误差。

对浮点数判断是否相等要慎用“==”运算符,恰当的办法是判断它们是否“约等于”,只要在允许的误差范围内,这种判断仍是有意义的。所谓“约等于”是指两个浮点数非常接近,即它们的差足够小(具体误差可以根据实际情况进行调整)。3.数据类型的转换

常用的类型转换函数如下。int(x)将x转换为整型。float(x)将x为转换浮点型。complex(x)将x转换为复数,其中复数的实部为x和虚部为0。complex(x,y)将x和y转换成一个复数,其中实部为x和虚部y。1.6.2位运算1.按位与运算

按位与运算符是&,其运算规则为:

0&0=0,0&1=0,1&0=0,1&1=12.按位或运算

按位或运算符是|,其运算规则为:

0|0=0,0|1=1,1|0=1,1|1=13.按位异或运算

按位异或运算符是^,其运算规则为:

0^0=0,0^1=1,1^0=1,1^1=04.按位取反运算

按位取反运算符是~,其运算规则为:

~0=1,~1=0第2章

顺序结构程序设计的基本步骤算法的概念Python程序的书写规则赋值语句输入输出语句顺序结构程序设计方法2.1.1程序设计的基本步骤分析问题,确定数学模型或方法设计算法,画出流程图选择编程工具,按算法编写程序调试程序,分析输出结果2.1程序设计概述2.1.2算法及其描述1.算法的概念计算机解决问题的方法和步骤,就是计算机解题的算法。例2-1

求例2-2

输入20个数,要求找出其中最大的数。2.算法的描述

(1)用传统流程图描述算法例2-3

用传统流程图来描述例2-1和例2-2的算法。用传统流程图描述的算法分别如图2-1和图2-2所示。用传统流程图描述例2-1的算法

用传统流程图描述例2-2的算法(2)用结构化流程图描述算法①程序的三种基本结构:顺序结构、选择结构和循环结构。

顺序结构选择结构

(a)当型循环结构(b)直到型循环结构

三种基本程序结构具有如下共同特点:只有一个入口。只有一个出口。结构中无死语句,即结构内的每一部分都有机会被执行。结构中无死循环,即循环在满足一定条件后能正常结束。②结构化流程图(N-S图):以三种基本结构作为构成算法的基本元素,每一种基本结构用一个矩形框来表示,而且取消了流程线,各基本结构之间保持顺序执行关系。

顺序结构的N-S图

选择结构的N-S图

(a)当型循环结构

(b)直到型循环结构例

用N-S图描述例2-1和例2-2的算法。

用N-S图描述例2-1的算法用N-S图描述例2-2的算法2.2.1初识Python程序例

输入三个变量的值,然后按小到大顺序输出。程序如下:x=int(input('inputx:'))#输入x的值y=int(input('inputy:'))#输入y的值z=int(input('inputz:'))#输入z的值ifx>y:#如果x>y,则x和y的值互换x,y=y,xifx>z:#如果x>z,则x和z的值互换x,z=z,xify>z:#如果y>z,则y和z的值互换y,z=z,yprint(x,y,z)2.2Python程序的书写规则例

已知f(x,y)=x2+y2,输入x,y的值,求出对应的函数值。程序如下:deff(x,y):returnx**2+y**2print("f(3,4)=",f(3,4))第一个语句定义了一个函数,然后调用该函数。前面的f(x,y)函数可以定义成lambda函数的形式。f=lambdax,y:x**2+y**2print("f(3,4)=",f(3,4))例

输出Fibonacci数列前50项之和。程序如下:a,b=0,1s=0foriinrange(50):#i从0变化到49

s+=ba,b=b,a+bprint("s=",s)程序段一:foriinrange(0,50):s+=b

a,b=b,a+b2.2.2

Python语句缩进规则Python通过语句缩进对齐反映语句之间的逻辑关系,从而区分不同的语句块。就一个语句块来讲,需要保持一致的缩进量。程序段二:foriinrange(0,50):

s+=ba,b=b,a+b两种缩进方式可用流程图直观表示。(a)(b)两种缩进方式的比较2.2.3Python语句行与注释1.语句行在Python中,语句行从解释器提示符后的第一列开始,前面不能有任何空格,否则会产生语法错误。每个语句行以回车符结束。可以在同一行中使用多条语句,语句之间使用分号分隔。如果语句行太长,可以使用反斜杠将一行语句分为多行显示。如果在语句中包含小括号、中括号或大括号,则不需要使用多行续行符。2.注释注释对程序的执行没有任何影响,目的是对程序作解释说明,以增强程序的可读性。程序中的单行注释采用#开头,注释可以从任意位置开始,可以在语句行末尾,也可以独立成行。对于多行注释,一般推荐使用多个#开头的多行注释,也可采用三引号(实际上是用三引号括起来的一个多行字符串,起到注释的作用)。注意,注释行是不能使用反斜杠续行的。2.3赋值语句Python的赋值和一般的高级语言的赋值有很大的不同,它是数据对象的一个引用。2.3.1赋值语句的一般格式一个变量通过赋值可以指向不同类型的对象。赋值语句的一般格式为:变量=表达式赋值号左边必须是变量,右边则是表达式。赋值的意义是先计算表达式的值,然后使该变量指向该数据对象,该变量可以理解为该数据对象的别名。Python是动态类型语言,也就是说不需要预先定义变量类型,变量的类型和值在赋值那一刻被初始化。例如:>>>x=67.2>>>x="ABCD"Python中的赋值并不是直接将一个值赋给一个变量,而是通过引用传递的。在赋值时,不管这个对象是新创建的还是一个已经存在的,都是建立变量对该数据对象的引用(并不是值)。2.3.2复合赋值语句Python还提供了12种复合赋值运算符:+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、|=、^=其中,前7种是常用的算术运算,后5种是关于位运算的复合赋值运算符。例如:x+=5.0x*=u+v分别等价于“x=x+5.0”和“x=x*(u+v)”。2.3.3多变量赋值1.链式赋值链式赋值语句的一般形式为:变量1=变量2=……=变量n=表达式例如:>>>a=b=10赋值语句执行时,创建一个值为10的整型对象,将对象的同一个引用赋值给a和b,即a和b均指向数据对象10。2.同步赋值同步赋值的一般形式为:变量1,变量2,……,变量n=表达式1,表达式2,……,表达式n其中赋值号左边变量的个数与右边表达式的个数要一致。同步赋值首先计算右边n个表达式的值,然后同时将表达式的值赋值给左边的n个变量,这并非等同于简单地将多个单一赋值语句进行组合。例如:>>>a,b,c=10,20,302.4.1标准输入输出1.标准输入Python用内置函数input()实现标准输入,其调用格式为:input([提示字符串])其中,中括号中的“提示字符串”是可选项。如果有“提示字符串”,则原样显示,提示用户输入数据。input()函数从标准输入设备(键盘)读取一行数据,并返回一个字符串(去掉结尾的换行符)。例如:>>>

name=input("Pleaseinputyourname:")Pleaseinputyourname:jasmine↙2.4

数据输入输出2.标准输出Python语言直接使用表达式可以输出该表达式的值。常用的输出方法是用print()函数,其调用格式为:print([输出项1,输出项2,……,输出项n][,sep=分隔符][,end=结束符])其中sep表示输出时各输出项之间的分隔符(默认以空格分隔),end表示结束符(默认以回车换行结束)。例如:print(10,20,sep=',',end='*')print(30)输出结果为:10,20*302.4.2格式化输出Python格式化输出的基本做法是,将输出项格式化,然后利用print()函数输出。具体实现方法有三种:利用字符串格式化运算符%。利用format()内置函数。利用字符串的format()方法。1.字符串格式化运算符%在Python中,格式化输出时,用运算符%分隔格式字符串与输出项,一般格式为;格式字符串%(输出项1,输出项2,……,输出项n)其中,格式字符串由普通字符和格式说明符组成。普通字符原样输出,格式说明符决定所对应输出项的输出格式。格式说明符以百分号%开头,后接格式标志符。例如:>>>print("%+3d,%0.2f"%(25,123.567))+25,123.572.format()内置函数format()内置函数可以将一个输出项单独进行格式化,一般格式为:format(输出项[,格式字符串])其中,格式字符串是可选项。当省略格式字符串时,该函数等价于函数“str(输出项)”的功能。format()内置函数把输出项按格式字符串中的格式说明符进行格式化。>>>print(format(15,'X'),format(65,'c'),format(3.145,'f'))FA3.1450003.字符串的format()方法在Python中,字符串都有一个format()方法,这个方法会把格式字符串当作一个模版,通过传入的参数对输出项进行格式化。字符串format()方法的调用格式为:格式字符串.format(输出项1,输出项2,……,输出项n)格式说明符使用大括号扩起来,一般形式如下:{[序号或键]:格式说明符}例如:>>>'{0:.2f},{1}'.format(3.145,500)'3.15,500'2.5顺序结构程序举例例已知x,y,求z的值。分析:这是一个求表达式值的问题,程序分为以下三步。求x,y的值。求z的值。输出z的值。例

从键盘输入一个三位整数n,输出其逆序数m。例如,输入n=127,则m=721。分析:程序分为以下三步。输入一个3位整数n。求逆序数m。输出m。例

求一元二次方程ax2

+

bx

+

c

=

0的根。分析:由于Python能进行复数运算,所以不需要判断方程的判别式,而直接根据求根公式求根。调用复数运算函数需要导入cmath模块。例有一线段AB,A的坐标为(1,1),B的坐标为(4.5,4.5),如图2-13所示。求AB的长度,以及黄金分隔点C的坐标。黄金分割点在线段的0.618处。分析:A,B的坐标可用复数表示:即A为(1+1j),B为(4.5+4.5j)。AB的长度就是(A-B)的模,可用abs函数直接求出复数的模。黄金分隔点C的坐标为A+0.618×(B-A)。第3章

选择结构Python中表示条件的方法if语句选择结构程序设计方法。3.1.1关系运算Python的关系运算符有:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)关系运算符用于两个量的比较判断。由关系运算符将两个表达式连接起来的式子就称为关系表达式,它用来表示条件,其一般格式为:表达式1关系运算符表达式2例如,i+j==k,a<b+c。3.1条件的描述3.1.2逻辑运算1.逻辑运算符Python的逻辑运算符有:and(逻辑与)、or(逻辑或)、not(逻辑非)其中and和or运算符要求有两个运算量,用于连接两个条件,构成更复杂的条件。not运算符只作用于后面的一个逻辑量。2.逻辑表达式逻辑表达式是用逻辑运算符将逻辑量连接起来的式子。除not以外,and和or构成的逻辑表达式一般形式为:P逻辑运算符Q其中P,Q是两个逻辑量。例

写出下列条件。(1)判断年份year是否为闰年。(2)判断ch是否为小写字母。(3)判断m能否被n整除。(4)判断ch既不是字母也不是数字字符。条件1:(year%4==0andyear%100!=0)oryear%400==0条件2:ch>='a'andch<='z'条件3:m%n==0或m-m/n*n==0条件4:not((ch>='A'andch<='Z')or(ch>='a'andch<='z')or(ch>='0'andch<='9'))3.逻辑运算的重要规则逻辑与(and)和逻辑或(or)运算分别有如下性质:(1)aandb:当a为False时,不管b为何值,结果为False。(2)aorb:当a为True时,不管b为何值,结果为True。对于aandb,当a的可解释为False,则表达式值为False,否则表达式的值为b;对于aorb,如果a为False,则表达式的值为b,否则表达式值为True。3.1.3测试运算1.成员测试in运算符用于在指定的序列中查找某个值是否存在,存在返回True,否则返回False。该运算符的使用格式是xiny,如果x在y序列中则返回True,否则返回False。例如:>>>3in(20,15,3,14,5)True“notin”的含义是,如果在指定的序列中没有找到值,则返回True,否则返回False。对于xnotiny,如果x不在y序列中返回True,否则返回False。例如:>>>3notin(20,15,3,14,5)False2.身份测试身份运算符用于测试两个变量是否指向同一个对象。例如:>>>a=20>>>b=20>>>aisbTrue>>>aisnotbFalse3.2.1单分支选择结构可以用if语句实现单分支选择结构,其一般格式为:if表达式:

语句块3.2选择结构的实现单分支if语句的执行过程注意:(1)在if语句的表达式后面必须加冒号。(2)因为Python把非0当作真,0当作假,所以表示条件的表达式不一定必须是结果为True或False的关系表达式或逻辑表达式,可以是任意表达式。(3)if语句中的语句块必须向右缩进,语句块可以是单个语句,也可以是多个语句。当包含两个或两个以上的语句时,语句必须缩进一致,即语句块中的语句必须上下对齐。(4)如果语句块中只有一条语句,if语句也可以写在同一行上。例如:例3-2输入两个整数a和b,先输出较大数,再输出较小数。分析:输入a,b,如果a<b,则交换a和b,否则不交换,最后输出a,b。程序如下:a,b=eval(input("输入a,b:"))ifa<b:#若a<b,交换a和b,否则不交换a,b=b,aprint("{0},{1}".format(a,b))3.2.2双分支选择结构可以用if语句实现双分支选择结构,其一般格式为:if表达式:

语句块1else:

语句块2双分支if语句的执行过程例

输入三角形的三个边长,求三角形的面积。分析:设a,b,c表示三角形的三个边长,则构成三角形的充分必要条件是任意两边之和大于第三边,即a+b>c,b+c>a,c+a>b。如果该条件满足,则可按照海伦公式计算三角形的面积:其中p=(a+b+c)/2。程序如下:frommathimport*a,b,c=eval(input("a,b,c="))ifa+b>canda+c>bandb+c>a:p=(a+b+c)/2s=sqrt(p*(p-a)*(p-b)*(p-c))print("a={0},b={1},c={2}".format(a,b,c))print("area={}".format(s))else:print("a={0},b={1},c={2}".format(a,b,c))print("inputdataerror")例

输入x,求对应的函数值y。分析:这是一个具有两个分支的分段函数,为了求函数值,可以采用双分支结构来实现。程序如下:frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)else:y=sin(x)+sqrt(x+exp(2))/(2*pi)print("x={},y={}".format(x,y))还可以采用两个单分支结构来实现,程序如下:frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)ifx>=0:y=sin(x)+sqrt(x+exp(2))/(2*pi)print("x={},y={}".format(x,y))

思考:第一个if语句能否不写,并分析原因。第二个if语句能否不用,并分析原因。3.2.3多分支选择结构多分支if语句的一般格式为:if表达式1:语句块1elif表达式2:

语句块2elif表达式3:

语句块3……elif表达式m:

语句块m[else:

语句块n]多分支if选择结构的执行过程例

输入学生的成绩,根据成绩进行分类,85以上为优秀,70~84为良好,60~69为及格,60以下为不及格。分析:将学生成绩分为四个分数段,然后根据各分数段的成绩,输出不同的等级。程序分为四个分支,可以用四个单分支结构实现,也可以用多分支if语句实现。程序如下:g=float(input("请输入学生成绩:"))ifg<60:print("不及格")elifg<70:print("及格")elifg<85:print("良好")else:print("优秀")语句二:if表达式1:if表达式2:

语句块1else:

语句块23.2.4选择结构的嵌套if语句中可以再嵌套if语句,例如,有以下不同形式的嵌套结构。语句一:if表达式1:if表达式2:

语句块1else:

语句块2Python的条件运算有三个运算量,其一般格式为:表达式1if表达式else表达式2条件运算的运算规则是,先求if后面表达式的值,如果其值为True,则求表达式1,并以表达式1的值为条件运算的结果。如果if后面表达式的值为False,则求表达式2,并以表达式2的值为条件运算的结果。例如,z=xifx>yelsey。3.3条件运算例

生成3个两位随机整数,输出其中最大的数。这里用条件运算表达式来实现,程序如下:importrandomx=random.randint(10,99)y=random.randint(10,99)z=random.randint(10,99)max=xifx>yelseymax=maxifmax>zelsezprint("x={0},y={1},z={2}".format(x,y,z))print("max=",max)例

输入一个整数,判断它是否为水仙花数。所谓水仙花数,是指这样的一些三位整数:各位数字的立方和等于该数本身,例如153=13+53+33,因此153是水仙花数。分析:关键的一步是先分别求三位整数个位、十位、百位数字,再根据条件判断该数是否为水仙花数。3.4选择结构程序举例例

输入一个时间(小时:分钟:秒),输出该时间经过5分30秒后的时间。

hour=int(input('请输入小时:'))minute=int(input('请输入分钟:'))second=int(input('请输入秒:'))second+=30ifsecond>=60:second=second-60minute+=1minute+=5ifminute>=60:minute=minute-60hour+=1ifhour==24:hour=0print('{0:d}:{1:d}:{2:d}'.format(hour,minute,second))例

硅谷公司员工的工资计算方法如下:(1)工作时数超过120小时者,超过部分加发15%。(2)工作时数低于60小时者,扣发700元。(3)其余按每小时84元计发。输入员工的工号和该员工的工作时数,计算应发工资。分析:为了计算应发工资,首先分两种情况,即工时数小于等于120小时和大于120小时。工时数超过120小时时,实发工资有规定的计算方法。而工时数小于等于120小时时,又分为大于60和小于等于60两种情况,分别有不同的计算方法。所以程序分为3个分支,即工时数>120、60<工时数≤120和工时数≤60,可以用多分支if结构实现,也可以用if的嵌套实现。例

输入年月,求该月的天数。分析:用year、month分别表示年和月,day表示每月的天数。考虑到以下两点。(1)每年的1、3、5、7、8、10、12月,每月有31天;4、6、9、11月,每月有30天;闰年2月有29天,平年2月有28天。(2)年份能被4整除,但不能被100整除,或者能被400整除的年均是闰年。第4章

循环结构while语句for语句循环结构程序设计方法。4.1.1while语句1.while语句的一般格式while语句的一般格式为:while表达式:

语句块while语句中的表达式表示循环条件,可以是结果能解释为True或False的任何表达式,常用的是关系表达式和逻辑表达式。表达式后面必须加冒号。语句块是重复执行的部分,称作循环体。4.1while循环结构while语法的执行过程注意:(1)当循环体由多个语句构成时,必须用缩进对齐的方式组成一个语句块,否则会产生错误。(2)与if语句的语法类似,如果while循环体中只有一条语句,可以将该语句与while写在同一行中。(3)如果表达式永远为True,循环将会无限地执行下去(俗称“死”循环)。在循环体内必须有修改表达式值的语句,使其值趋向False,让循环趋于结束,避免无限循环。2.在while语句中使用else子句在Python中,可以在循环语句中使用else子句,else中的语句会在循环正常执行完的情况下执行(不管是否执行循环体)。例如:count=int(input())whilecount<5:print(count,"islesshan5")count=count+1else:print(count,"isnotlessthan5")程序的一次运行结果如下:8↙8isnotlessthan54.1.2while循环的应用例

计算1+2+3+……+100的值。分析:累加问题可用递推式来描述:si=si-1+ni(s0=0,n1=1),从循环的角度看即本次循环的累加和s等于上次循环的累加和加上本次的累加项n,可用赋值语句“s+=n”来实现。此例的累加项n的递推式为:ni=ni-1+1(n1=1),可用赋值语句“n+=1”来实现(n=1,2,3,……,100)。循环体要实现两种操作:s+=n和n+=1,并置s的初值为0,n的初值为1。例

求sinx近似值,直到最后一项的绝对值小于10-6时停止计算。其中x为弧度,但从键盘输入时以角度为单位。分析:这是一个累加求和问题。关键是如何求累加项,较好的办法是利用前一项来求后一项,即用递推的办法来求累加项。第i项与第i-1项之间的递推关系为:

a1=x求sinx值的算法例输入一个整数,输出其位数。分析:输入的整数存入变量n中,用变量k来统计n的位数,基本思路是每循环一次就去掉n的最低位数字(用Python的整除运算符实现),直到n为0。4.2.1for语句1.for语句的一般格式for语句的一般格式为:for目标变量in序列对象:

语句块for语句的首行定义了目标变量和遍历的序列对象,后面是需要重复执行的语句块。语句块中的语句要向右缩进,且缩进量要一致。4.2for循环结构for语句执行过程注意:(1)for语句是通过遍历任意序列的元素进行来建立循环的,针对序列的每一个元素执行一次循环体。列表、字符串、元组都是序列,可以利用它们来建立循环。(2)for语句也支持一个可选的else块,它的功能就像在while循环中一样,如果循环离开时没有碰到break语句,就会执行else块。也就是序列所有元素都被访问过了之后,执行else块。2.rang对象在for循环中的应用在Python3.x中,range()函数返回的是可迭代对象。Python专门为for语句设计了迭代器的处理方法。例如:foriinrange(5):print(i,end='')程序输出结果如下:01234首先Python对关键字in后的对象调用iter()函数获得迭代器,然后调用next()函数获得迭代器的元素,直到抛出StopIteration异常。4.2.2for循环的应用例

输入20个数,求出其中的最大数与最小数。分析:先假设第一个数就是最大数或最小数,再将剩下的19个数与到目前为止的最大数、最小数进行比较,比完19次后即可找出20个数中的最大数与最小数。例

求Fibonacci数列的前30项。分析:设待求项(即fn)为f,待求项前面的第一项(即fn-1)为f1,待求项前面的第二项(即fn-2)为f2。首先根据f1和f2推出f,再将f1作为f2,f作为f1,为求下一项作准备。如此一直递推下去。

1 1 2 3 5第一次:f2+ f1→ f

↓ ↓第二次:f2+ f1→ f

↓ ↓第三次: f2+ f1→ f例4-6输入一个整数m,判断是否为素数。分析:素数是大于1,且除了1和它本身以外,不能被其他任何整数所整除的整数。为了判断整数M是否为素数,一个最简单的办法用2、3、4、5、……、M-1这些数逐个去除M,看能否整除,如果全都不能整除,则M是素数,否则,只要其中一个数能整除,则M不是素数。当M较大时,用这种方法,除的次数太多,可以有许多改进办法,以减少除的次数,提高运行效率。可以设一个变量来作为是否素数的标志,用for语句实现程序。4.3.1break语句break语句用在循环体内,迫使所在循环立即终止,即跳出所在循环体,继续执行循环结构后面的语句。4.3循环控制语句例

求两个整数a与b的最大公约数。分析:找出a与b中较小的一个,则最大公约数必在1与较小整数的范围内。使用for语句,循环变量i从较小整数变化到1。一旦循环控制变量i同时整除a与b,则i就是最大公约数,然后使用break语句强制退出循环。4.3.2continue语句当在循环结构中执行continue语句时,立即结束本次循环,重新开始下一轮循环。例

求1~100之间的全部奇数之和。程序如下:x=y=0whileTrue:x+=1ifnot(x%2):continue#x为偶数直接进行下一次循环elifx>100:break #x>100时退出循环else:y+=x #实现累加print("y=",y)4.3.3pass语句pass语句是一个空语句,它不做任何操作,代表一个空操作。看下面的循环语句。forxinrange(10):pass该语句的确会循环10次,但是除了循环本身之外,它什么也没做。4.4循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。例

输入n,求表达式的值。分析:这是求n项之和的问题。先求累加项a,再用语句“s=s+a”实现累加,共有n项,所以共循环n次。求累加项a时,分母又是求和问题,也可以用一个循环来实现。因此整个程序构成一个二重循环结构。例4输出[100,1000]以内的全部素数。分析:可分为以下两步。(1)判断一个数是否为素数。(2)将判断一个数是否为素数的程序段,对指定范围内的每一个数都执行一遍,即可求出某个范围内的全部素数。这种方法称为穷举法,也叫枚举法4.5循环结构程序举例例4已知y,求:(1)y<3时的最大n值。(2)与(1)的n值对应的y值。分析:这是一个累加求和问题,循环条件是累加和y≥3,用N-S图表示算法如图所示。当退出循环时,y的值已超过3,因此要减去最后一项,n的值相应也要减去1。又由于最后一项累加到y后,n又增加了1,故n还要减去1,即累加的项数是n-2。求y值的算法思考:(1)求y≥3时的最小n,如何修改程序?(2)求y的值,直到累加项小于10-6为止,如何修改程序?(3)n取100,求y的值,如何修改程序?例

用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的实根,直到满足|xn-xn-1|≤10-6为止。分析:迭代法的关键是确定迭代公式、迭代的初始值和精度要求。牛顿切线法是一种高效的迭代法,它的实质是以切线与x轴的交点作为曲线与x轴交点的近似值以逐步逼近解,如图所示。牛顿迭代法牛顿迭代公式为:例4-13

求f(x)在[a,b]上的定积分分析:为了求得图形面积,先将区间[a,b]分成n等分,每个区间的宽度为h=(b-a)/n,对应地将图形分成n等分,每个小部分近似一个小曲边梯形。近似求出每个小曲边梯形面积,然后将n个小曲边梯形的面积相加,就得到总面积,即定积分的近似值。n越大,近似程度越高。这就是函数的数值积分方法。近似求每个小曲边梯形的面积,常用的方法有:(1)用小矩形代替小曲边梯形,求出各个小矩形面积,然后累加。此种方法称为矩形法。(2)用小梯形代替小曲边梯形,此种方法称为梯形法。(3)用抛物线代替该区间的f(x),然后求出抛物线与x=a+(i-1)h,x=a+ih,y=0围成的小曲边梯形面积,此种方法称为辛普生法。以梯形法为例,求解方法如图所示。梯形法求定积分第一个小梯形的面积为:第二个小梯形的面积为:……第n个小梯形的面积为:例

验证哥德巴赫猜想:任何大于2的偶数,都可表示为两个素数之和。分析:哥德巴赫猜想是一个古老而著名的数学难题,迄今未得出最后的理论证明。这里只是对有限范围内的数,用计算机加以验证,不算严格的证明。读入偶数n,将它分成p和q,使n=p+q。p从2开始(每次加1),q=n-p。若p、q均为素数,则输出结果,否则将p+1再试。例

将1元钱换成1分、2分、5分的硬币有多少种方法。分析:设x为1分硬币数,y为2分硬币数,z为5分硬币数,则有如下方程:x+2y+5z=100可以看出,这是一个不定方程,没有唯一的解。这类问题无法使用解析法求解,只能将所有可能的x,y,z值一个一个地去试,看是否满足上面的方程,如满足则求得一组解。和前面介绍过的求素数问题一样,程序也是采用穷举法。第5章

字符串与正则表达式字符串编码字符串的各种操作正则表达式的应用1.Unicode码Unicode编码标准为表达全世界所有语言的任意字符而设计,它使用4字节的数字编码来表达每个字母、符号或文字。每个数字编码代表唯一的至少在某种语言中使用的符号,被几种语言共用的字符通常使用相同的数字来编码,每个字符对应一个数字编码,每个数字编码对应一个字符,即不存在二义性。5.1字符串编码2.UTF-8码UTF-8是一种为Unicode字符设计的变长编码系统,即不同的字符可使用不同数量的字节编码。对于ASCII字符,UTF-8仅使用1个字节来编码。UTF-8支持中英文编码,英文系统也可以显示中文。Python支持UTF-8编码,中文字符、希腊字母均可以作为标识符使用。例如:>>>π=3.14159>>>国家='中国'3.Unicode码与UTF-8码的转换在Python中,可以通过字符串的encode()方法从Unicode编码为指定编码方式。decode()方法从指定编码方式解码为Unicode方式。例如:>>>s='汉字ABC'>>>k=s.encode('utf-8')>>>kb'\xe6\xb1\x89\xe5\xad\x97ABC'>>>k.decode('utf-8')'汉字ABC'5.2.1字符串的索引为了实现索引,需要对字符串中的字符进行编号,最左边字符编号为0,最右边字符的编号比字符串的长度小1。Python还支持在字符串中使用负数从右向左进行编号,最右边的字符(即倒数第1个字符)的编号为-1。字符串变量名后接用中括号括起来的编号即可实现字符串的索引。5.2字符串的索引与分片例如:>>>s="Hello"字符串s中各个字符的索引编号如图所示。字符串中字符的索引编号例5-1将一个字符串中的字符按逆序打印出来。分析:先输出字符串的最后一个字符,且不换行,然后输出倒数第2个字符,同样不换行,一直到第1个字符。利用for循环控制字符索引编号,循环赋值目标变量从0变化到字符串的长度。取字符串的长度可以利用len()函数。程序如下:s1=input("Pleaseenterastring:")foriinrange(0,len(s1)):print(s1[len(s1)-1-i],end='')5.2.2字符串的分片字符串的分片就是从给定的字符串中分离出部分字符,这时可以使用以下形式的字符串索引编号。i:j:k其中i是索引起始位置,j是索引结束位置但不包括j位置上的字符,索引编号每次增加的步长为k。例如:>>>s="HelloWorld!">>>print(s[0:5:2])Hlo>>>s='abcdefg'>>>s[5:1:-1]'fedc'>>>s[-len(s):-1]'abcdef'例5-2利用字符串分片方法将一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论