《Python编程入门与实践(微视频版)》课件 席亮 第1-5章 Python编程基础-Python文件操作_第1页
《Python编程入门与实践(微视频版)》课件 席亮 第1-5章 Python编程基础-Python文件操作_第2页
《Python编程入门与实践(微视频版)》课件 席亮 第1-5章 Python编程基础-Python文件操作_第3页
《Python编程入门与实践(微视频版)》课件 席亮 第1-5章 Python编程基础-Python文件操作_第4页
《Python编程入门与实践(微视频版)》课件 席亮 第1-5章 Python编程基础-Python文件操作_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

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

文档简介

Python是一门跨平台、开源、免费的解释型高级动态编程语言。作为一种动态语言,Python尤其适合初学编程者,因为它能够让初学者将注意力集中在编程的对象和思维方法上,而不必过于担心语法和类型等外部因素。Python易于学习,并拥有丰富的库,使得开发各种应用程序变得高效。本章将介绍Python语言的优缺点、安装方法以及Python开发环境IDLE的使用。第1章Python编程基础1.1Python语言简介Python的创始人吉多•范罗苏姆(GuidovanRossum),于1989年底发明了Python语言,其被广泛应用于系统管理任务和科学计算,是最受欢迎的编程语言之一。2011年1月,TIOBE编程语言排行榜将其评选为2010年度编程语言。自2004年以来,Python的使用率持续增长,在2017年TIOBE编程语言指数排行榜中位列第四名(前3名为Java、C和C++)。早在2017年7月,根据IEEESpectrum发布的编程语言排行榜显示Python已成为全球最受欢迎的编程语言。2024年,Python无论在数据分析、机器学习,还是Web开发领域,都展现出了强大的适应性,受到广大程序员的青睐,再次突破历史记录,稳居编程一眼排行榜的前列。Python支持命令式编程、函数式编程,完全支持面向对象编程,语法简洁清晰,且拥有大量成熟的扩展库,几乎覆盖所有领域的应用开发。许多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK和医学图像处理库ITK。此外,Python专用的科学计算扩展库也非常丰富,经典的有NumPy、SciPy和Matplotlib,它们分别为Python提供了快速数组处理、数值运算和绘图功能。因此,Python及其众多扩展库为工程技术和科研人员处理实验数据、制作图表,甚至开发科学计算应用程序提供了理想的开发环境。1.2.1安装与配置Python环境因为Python是跨平台的,它可以在Windows、Mac以及各种Linux/Unix系统上运行。用户在Windows上编写的Python程序,能够直接在Linux上运行。学习Python编程的第一步是将Python安装到计算机上。安装完成后,将获得Python解释器(负责执行Python程序)、一个命令行交互环境,以及一个简单的集成开发环境(IDE)。Python至今已有多个版本。但截至目前,主流版本仍为Python2.x和Python3.x,这两个版本并不兼容。Python2.x版本已于2020年1月1日停止更新,而Python2.7更是被确定为最后一个Python2.X版本。因此,如果用户正在使用Python2.X,建议考虑升级到Python3.x。1.2.1安装Python1.2.2运行Python1.2.2安装Python在Mac上安装Python若用户使用的是Mac系统,版本在OSX10.8到10.10之间,那么系统自带的Python版本是2.x。要安装最新的Python3.x,可以使用以下两种方法。 方法一:从Python官方网站()下载Python3.x的安装程序,双击运行并进行安装。 方法二:如果已经安装了Homebrew,可以通过命令行直接执行brewinstallpython3来完成安装。运行Python若用户使用的是Linux,并具备一定的系统管理经验,可以参考以下步骤安装Python3.x。(1)下载Python安装包,例如Python-3.5.0b4.tgz。(2)使用解压命令解压下载的文件:tar-zxvfPython-3.5.0b4.tgz(3)切换到解压后的安装目录cdPython-3.5.0(4)执行配置命令:./configure(5)编译安装:makemakeinstall至此,Python的安装已完成。1.3Python开发环境IDLEIDLE是Python自带的集成开发环境,提供了一个简单的界面用于编写、调试和运行Python代码。1.3.1启动IDLE1.3.2使用IDLE创建Python程序1.3.3IDLE的常用编辑功能1.3.4在IDLE中运行和调试Python程序1.3.1启动IDLE在Windows系统中成功安装Python后,可以通过单击系统桌面上的“开始”按钮,在弹出的菜单中选择“IDLE(Python3.x64-bit)”命令来启动IDLE,打开图1-3所示的初始窗口。在图1-3所示的IDLE窗口中,首先显示的是PythonShell,用户可以在其中使用交互式编程模式执行Python命令。使用交互式编程模式时,只需在IDLE提示符“>>>”后输入相应的命令并按回车键即可执行。如果命令执行成功,将立即看到结果;如果出现问题,则会抛出异常。例如,查看已安装的Python版本(在IDLE界面的标题栏中也可以直接看到):>>>importsys>>>sys.version1.3.2使用IDLE创建Python程序IDLE为开发人员提供了许多实用的特性,如自动缩进、语法高亮显示、单词自动完成和命令历史等。这些功能可以有效提高开发效率。下面通过一个实例来逐一介绍这些特性。示例程序的源代码如下:#示例一p=input("Pleaseinputyourpassword:\n")ifp!="123":print("passworderror!")从图1-4可以看到,不同部分的代码采用了不同的颜色,这就是语法高亮显示。语法高亮显示通过为代码中的不同元素使用不同的颜色,使代码更易于阅读。默认情况下,关键字显示为橙红色,注释为红色,字符串为绿色,解释器的输出为蓝色。在输入代码时,这些颜色会自动应用,语法高亮显示的好处在于可以更容易地区分不同的语法元素,从而提高代码的可读性。此外,语法高亮显示还可以减少出错的可能性。1.3.3IDLE的常用编辑功能下面将介绍编写Python程序时常用的IDLE命令,供初学者参考(按菜单分类)。Edit菜单中常用的命令及其功能说明如表1-1所示。Format菜单中常用的命令及其功能说明如表1-2所示。1.3.4在IDLE中运行和调试Python程序1.运行Python程序要在IDLE中执行Python程序,可以在Run菜单中选择RunModule命令(或直接按下F5键)。此命令的功能是执行当前打开的文件。例如,在执行示例程序时,用户输入的密码为888,但由于输入错误,输出结果为“passworderror!”,如图1-5所示。2.使用IDLE调试器在软件开发过程中,难免会遇到各种错误,包括语法错误和逻辑错误。对于语法错误,Python解释器能够轻松检测,并会停止程序运行并给出相应的错误提示。然而,对于逻辑错误,解释器则无能为力,程序可能会继续执行,但运行结果却是错误的。因此,调试程序通常是必要的,以确保代码的正确性和可靠性。在PythonShell窗口中,选择Debug菜单中的Debugger命令,即可启动IDLE的交互式调试器。这时,IDLE会打开如图1-6所示的DebugControl窗口,并在PythonShell窗口中输出[DEBUGON],后跟一个“>>>”提示符。1.4Python基本输入/输出Python的基本输入通过input()函数获取用户输入,而输出则使用print()函数将信息显示在控制台。1.4.1Python基本输入1.4.2Python基本输出1.4.1Python基本输入在Python中进行程序设计时,输入是通过input()函数实现的。input()的一般格式为:x=input("输入一个值:")该函数返回用户输入的对象,可以输入数字、字符串和其他任意类型的对象。不过,Python2.7和Python3.x的input()函数虽然形式相同,但在解释上略有不同。在Python2.7中,返回结果的类型由输入值时所使用的界定符决定。例如,以下是Python2.7的示例代码:x=input("Pleaseinput:")如果输入为:Pleaseinput:3由于没有使用界定符,结果会被解释为整数:>>>printtype(x)<type'int'>如果输入为:Pleaseinput:'3'由于使用了单引号,结果将被解释为字符串:>>>printtype(x)<type'str'>1.4.2Python基本输入在Python中进行程序设计时,输入是通过input()函数实现的。input()的一般格式为:x=input("输入一个值:")该函数返回用户输入的对象,可以输入数字、字符串和其他任意类型的对象。不过,Python2.7和Python3.x的input()函数虽然形式相同,但在解释上略有不同。在Python2.7中,返回结果的类型由输入值时所使用的界定符决定。例如,以下是Python2.7的示例代码:x=input("Pleaseinput:")如果输入为:Pleaseinput:3由于没有使用界定符,结果会被解释为整数:>>>printtype(x)<type'int'>如果输入为:Pleaseinput:'3'由于使用了单引号,结果将被解释为字符串:>>>printtype(x)<type'str’>在Python3.x中,input()函数始终返回字符串类型,因此不再区分输入值的类型。1.4.2Python基本输入以下是Python3.x的示例代码:x=input('Pleaseinput:')如果输入为:Pleaseinput:3则输出结果为:>>>print(type(x))<class'str'>如果输入为:Pleaseinput:'1'输出结果同样为:>>>print(type(x))<class'str'>如果输入为:Pleaseinput:[1,2,3]输出结果仍然是:>>>print(type(x))<class'str'>1.5Python代码规范Python代码规范(PEP8)强调代码的可读性,包括使用4个空格进行缩进、适当命名、保持行长度不超过79个字符,以及在逻辑块之间添加空行。(1)缩进。Python程序通过代码块的缩进来体现逻辑关系,缩进的结束标志着一个代码块的结束。类定义、函数定义、选择结构和循环结构等都以行尾的冒号表示缩进的开始。同一层级的代码块必须保持一致的缩进量。例如:foriinrange(10):#循环输出0到9的数字

print(i,end=',')一般而言,建议使用4个空格作为基本缩进单位,避免使用制表符(tab)。在IDLE开发环境中,可以通过以下操作来进行代码块的缩进和反缩进:选择Format|IndentRegion(或DedentRegion)命令。(2)注释。一个好的、可读性强的程序通常包含超过20%的注释。常用的注释方式主要有以下两种。 方法一:使用#开始,表示本行#之后的内容为注释。例如:#循环输出0到9的数字foriinrange(10):print(i,end='')

方法二:用三重引号"""或'''包围的内容,如果不属于任何语句,则被解释器视为注释。例如:"""循环输出0到9的数字,可以包含多行文字"""foriinrange(10):print(i,end='')1.5Python代码规范在IDLE开发环境中,可以通过以下操作快速注释或解除注释一段代码:选择Format|CommentOutRegion(或UncommentRegion命令)。(3)每个import语句应只导入一个模块,而不应一次导入多个模块。例如:>>>importmath#导入math数学模块>>>math.sin(0.5)#求0.5的正弦>>>importrandom#导入random随机模块>>>x=random.random()#获得[0,1)内的随机小数>>>y=random.random()>>>n=random.randint(1,100)#获得[1,100]范围内的随机整数虽然可以使用importmath,random一次导入多个模块,但不提倡这样做。导入的顺序应为:首先导入Python内置模块,其次导入第三方模块,最后导入自己开发的项目中的其他模块。避免使用frommoduleimport*,除非是导入常量定义模块或其他确保不会出现命名冲突的模块。(4)如果一行语句过长,可以在行尾添加反斜杠“\”来换行,但更推荐使用括号将多行内容包含起来。例如:x='这是一个非常长非常长非常长非常长\非常长非常长非常长非常长非常长的字符串'#使用反斜杠“\”换行x=('这是一个非常长非常长非常长非常长''非常长非常长非常长非常长非常长的字符串')#圆括号中的行会连接起来1.5Python代码规范另一个示例:if(width==0andheight==0andcolor=='red'andemphasis=='strong'):#圆括号中的行会连接起来

y='正确'else:y='错误'(5)必要的空格与空行。建议在运算符两侧、函数参数之间及逗号两侧使用空格分隔。此外,不同功能的代码块之间、不同的函数定义之间应该增加一个空行,以提高可读性。(6)常量命名。常量名应全部字母大写,并用下划线连接各个单词。类名的首字母应大写。例如:CONSTANT_VALUE=0THIS_IS_A_CONSTANT=11.6Python帮助信息使用Python的帮助功能对于学习和开发都是非常重要的。在Python中,可以使用help()方法来获取帮助信息。其使用格式如下:help(对象)以下将分为三种情况进行说明。1.6.1查看内置函数和类型的帮助信息1.6.2查看模块中的成员函数信息1.6.3查看整个模块的信息1.6.1查看内置函数和类型的帮助信息在IDLE环境中输入以下命令,可以查看内置max函数的帮助信息(如图1-7所示):>>>help(max)>>>help(list)#可以获取list列表类型的成员方法>>>help(tuple)#可以获取tuple元组类型的成员方法1.6.2查看模块中的成员函数信息要查看某个模块中的成员函数信息,可以使用以下命令:>>>importos>>>help(os.fdopen)上述例子查看os模块中的fdopen成员函数的信息,得到如图1-8所示的提示:1.6.3查看模块中的成员函数信息查看整个模块的信息使用help(模块名)可以查看整个模块的帮助信息。这里需要注意的是,首先需要使用import导入该模块。例如,要查看math模块的方法:>>>importmath>>>help(math)帮助信息如图1-9所示。要查看Python中所有的模块,可以使用以下命令:help("modules")1.7课后实践本章为用户进一步学习Python奠定了扎实的基础,下面的课后实践部分,用户可以通过动手实现几个简单的编程实例并完成课后的思考练习,加深对Python的了解。1.熟悉IDLE开发环境2.熟悉pip工具3.编写程序,求解30°的正弦函数值数据类型是程序中最基本的概念,确定数据类型后,才能明确变量的存储方式及其操作。表达式则是用于表示计算求值的式子。数据类型和表达式是程序员编写程序的基础。因此,本章介绍的内容构成了进行Python程序设计的基本框架。第2章Python语法基础2.1Python数据类型计算机程序能够处理各种数值类型,但不仅限于数值。计算机还可以处理文本、图形、音频、视频、网页等多种数据,因此需要定义不同的数据类型。2.1.1数值类型2.1.2字符串2.1.3布尔类型2.1.4空值2.1.5Python数字类型转换2.1.1数值类型Python中的数值类型用于存储数值。Python支持4种不同的数值类型,如表2-1所示。2.1.2字符串字符串是Python中最常用的数据类型。可以使用引号来创建字符串。Python不支持单独的字符类型,单个字符在Python中也作为字符串处理。Python使用单引号和双引号表示字符串是等价的。1.创建和访问字符串2.Python转义字符3.Python字符串运算符4.字符串格式化2.1.3布尔类型Python支持布尔类型的数据,布尔类型只有两个值:True和False。布尔类型支持以下几种运算: and(与运算):只有当两个布尔值都为True时,计算结果才为True。TrueandTrue#结果是TrueTrueandFalse#结果是FalseFalseandTrue#结果是FalseFalseandFalse#结果是False or(或运算):只要有一个布尔值为True,计算结果就是True。TrueorTrue#结果是TrueTrueorFalse#结果是TrueFalseorTrue#结果是TrueFalseorFalse#结果是False not(非运算):将True变为False,或者将False变为True。notTrue#结果是FalsenotFalse#结果是True2.1.4空值空值是Python中一个特殊的值,用None表示。它不支持任何运算,也没有任何内置函数方法。None与任何其他数据类型进行比较时,永远返回False。在Python中,未指定返回值的函数会自动返回None。2.1.5Python数字类型转换Python提供了多种数字类型转换函数,如表2-5所示。2.2变量和常量IPython的变量是用于存储数据的命名空间,其值可以在程序运行时改变,而常量则是指在程序中其值不可改变的固定数据。2.2.1变量2.2.2常量2.2.1变量变量的概念基本上与初中代数中的方程变量相似,但在计算机程序中,变量不仅可以表示数字,还可以表示任意数据类型。在程序中,变量通过一个变量名来表示,变量名必须由大小写字母、数字和下划线(“_”)的组合构成,并且不能以数字开头。例如:a=1#变量a是一个整数t_007="T007"#变量t_007是一个字符串Answer=True#变量Answer是一个布尔值True在Python中,等号“=”用于赋值,可以将任意数据类型赋值给变量,同一个变量可以反复赋值,并且可以赋值不同类型的数据。例如:a=123#a是整数a='ABC'#a变为字符串这种变量类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,则会报错。例如,C语言是静态语言,赋值语句如下(//表示注释):inta=123;//a是整数类型变量a="ABC";//错误,不能将字符串赋值给整型变量2.2.2常量常量是指不可更改的变量,例如常用的数学常数π就是一个常量。在Python中,常量通常使用全大写的变量名表示,例如:PI=3.1415926535然而,实际上PI仍然是一个变量,Python并没有任何机制来保证PI的值不会被改变。因此,虽然使用全大写的变量名来表示常量是一种约定,但在实际操作中,PI的值是可以被修改的。1.3运算符与表达式在程序中,表达式用于计算和求值,它由运算符(操作符)和运算数(操作数)组成。运算符是表示进行某种运算的符号,而运算数则可以是常量、变量和函数等。例如,在表达式4+5中,4和5被称为操作数,+则是运算符。2.3.1运算符2.3.2表达式2.3.1运算符Python支持多种类型的运算符,包括:算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。算术运算符关系运算符逻辑运算符赋值运算符位运算符成员运算符标识运算符运算符的优先级2.3.2表达式表达式是由一个或多个运算组成的组合。Python语言中的表达式与其他编程语言的表达式没有显著区别。每个符合Python语言规则的表达式都会计算出一个确定的值。常量、变量的运算以及函数的调用都可以构成表达式。在本书后续章节中,我们将介绍的序列、函数和对象也可以成为表达式的一部分。2.4序列数据结构序列是Python中最基本的数据结构。序列中的每个元素都分配有一个数字,称为其位置或索引。第一个索引为0,第二个索引为1,以此类推。序列支持的操作包括索引、切片、加法、乘法以及成员检查。此外,Python内置了确定序列长度以及查找最大和最小元素的方法。最常见的内置序列类型包括列表、元组、字典和集合。2.4.1列表2.4.2元组2.4.3字典2.4.4集合2.4.1列表列表(list)是Python中使用最广泛的数据类型。列表中的数据项不需要具有相同的类型。虽然列表类似于其他语言中的数组,但其功能要强大得多。创建一个列表,只需将逗号分隔的不同数据项用方括号括起来即可。例如:list1=['泰山','嵩山',1997,2000]list2=[1,2,3,4,5]list3=["a","b","c","d"]列表的索引从0开始,可以进行截取(切片)、组合等操作。访问列表中的值更新列表删除列表元素添加列表元素定义多维列表列表的操作符2.4.2元组Python的元组(tuple)与列表类似,但有一个重要的区别:元组的元素不可修改。元组使用小括号()来定义,而列表则使用方括号[]。元组中的元素类型可以不同。创建元组访问元组元组连接删除元组元组运算符元组与列表转换2.4.3字典Python字典(dict)是一种可变容器模型,能够存储任意类型的对象,如字符串、数字、元组等其他容器模型。字典也被称为关联数组或哈希表。创建字典访问字典里的值修改字典in运算获取字典中的所有值items()方法2.4.4集合集合(set)是一个无序且不重复元素的序列。集合的基本功能包括进行成员关系测试和删除重复元素。创建集合成员测试集合运算在Python程序中,执行语句默认按照书写顺序依次执行,这种结构被称为顺序结构。然而,仅有顺序结构并不足以满足所有需求,因为有时需要根据特定条件选择性地执行某些语句,这时就引入了选择结构。此外,有时还需要在给定条件下反复执行某些语句,这称为循环结构。通过这三种基本结构,便可以构建出任意复杂的程序。第3章Python控制语句3.1选择结构在三种基本程序结构中,选择结构可以通过if语句、if...else语句和if...elif...else语句来实现。3.1.1if语句3.1.2if…else语句3.1.3if…elif…else语句3.1.4pass语句3.1.1if语句Python的if语句功能与其他编程语言相似,用于判断给定条件是否满足,并根据判断结果(真或假)决定是否执行相应的操作。if语句是一种单选结构,主要用于选择执行或不执行某个操作。if语句由三部分组成:关键字if、测试条件的表达式(即条件表达式),以及在条件为真(即表达式值非零)时要执行的代码。其语法形式如下所示:if表达式:

语句1if语句的流程图如图3-1所示。3.1.2if…else语句前面介绍的if语句是一种单选结构,意味着如果条件为真(即表达式的值非零),程序将执行指定的操作;否则,将跳过该操作。而if...else语句则是一种双选结构,用于在两个备选行动中选择一个。if...else语句由五部分组成:关键字if、测试条件的表达式、在条件为真时要执行的代码,以及关键字else和在条件为假时要执行的代码。其语法形式如下所示:if表达式:

语句1else:

语句2if...else语句的示意图如图3-2所示。3.1.3布尔类型有时我们需要在多组操作中选择执行其中一组,这时就会使用多选结构。在Python中,这种结构是通过if...elif...else语句实现的。该语句允许我们检查一系列条件表达式,并在某个表达式为真时执行相应的代码。需要注意的是,尽管if...elif...else语句可以包含多个备选操作,但最终只会执行其中一组操作。其语法形式如下所示:if表达式1:

语句1elif表达式2:

语句2#...elif表达式n:

语句nelse:

语句n+1需要注意的是,最后一个elif子句之后的else子句并不进行条件判断,它用于处理所有前面条件不匹配的情况,因此else子句必须放在最后。if...elif...else语句的示意图如图3-3所示。3.1.4pass语句Python提供了一个关键字pass,它类似于空语句,可以在类和函数的定义中,或在选择结构中使用。当暂时无法确定如何实现某个功能,或者需要为将来的软件升级留出空间,或者在其他类型的功能中时,可以使用这个关键字作为占位符。例如,以下代码是合法的:ifa<b:pass#什么操作也不做else:z=aclassA:#类的定义

passdefdemo():#函数的定义

pass在以上示例中,pass语句允许在程序的特定位置保留一个空的代码块,确保代码结构的完整性,同时不会引发错误。这在编写框架或预留未来的功能时非常有用。3.2循环语句在一般情况下,程序按照顺序执行。然而,编程语言提供了各种控制结构,以允许更复杂的执行路径。循环语句使得某个语句或语句组可以被多次执行。Python提供了for循环和while循环(注意,Python中没有do...while循环)。3.2.1while语句3.2.2for语句3.2.3continue和break语句3.2.4循环嵌套3.2.1while语句在Python编程中,while语句用于在满足某个条件时循环执行一段代码。这种结构适合处理需要重复执行的相同任务。while语句的基本形式如下:while判断条件:

执行语句while语句的流程图如图3-4所示。这种结构允许程序在条件为真时持续执行指定的语句,直到条件不再成立为止。3.2.2for语句for语句可以遍历任何序列的项目,例如列表、元组或字符串。for循环的语法通过索引循环【例3-4】遍历字符串中的字符。forletterin'Python':print('当前字母:',letter)3.2.3continue和break语句break语句可以在while循环和for循环中使用,通常放在if选择结构中。一旦break语句被执行,整个循环将会提前结束。continue语句的作用是终止当前循环的迭代,忽略continue之后的语句,然后返回循环的顶部,开始下一次迭代。在使用break语句时,除非能使代码更加简洁或清晰,否则应谨慎使用。【例3-7】continue和break的用法示例。#continue和break的用法i=1whilei<10:i+=1ifi%2>0:#当i为奇数时,跳过输出

continueprint(i)#输出偶数:2、4、6、8、10i=1whileTrue:#循环条件为True,始终成立

print(i)#输出1~10i+=1ifi>10:#当i大于10时,跳出循环

break3.2.4循环嵌套Python语言允许在一个循环体内嵌套另一个循环。这意味着可以在while循环中嵌入for循环,也可以在for循环中嵌入while循环。通常情况下,嵌套层次不应超过三层,以保持代码的可读性。这里需要注意以下两点: 循环嵌套时,外层循环和内层循环之间存在包含关系,即内层循环必须完全包含在外层循环的代码块中。 当程序中出现循环嵌套时,每当外层循环执行一次,其内层循环必须完成所有迭代(即内层循环结束)后,才能进入外层循环的下一次迭代。3.3常用算法Python常用算法包括累加和累乘、求最大值和最小值、枚举法、递推与迭代等,这些算法广泛应用于数据处理和问题求解。3.3.1累加和累乘3.3.2求最大数和最小数3.3.3枚举法3.3.4递推与迭代3.3.1累加和累乘累加与累乘是最常见的算法类型,它们通过在原有基础上不断地加上或乘以一个新的数来进行计算。例如,求1+2+3+…+n,计算n的阶乘、求某个数列前n项的和,以及计算一个级数的近似值等,都是这类算法的典型应用。【例3-11】编写程序,求自然对数e的近似值。i=1p=1sum_e=1#初始化sum_e为1t=1/p#计算第一项whilet>0.00001:#设定误差阈值

p=p*i#计算i的阶乘

t=1/p#计算当前项

sum_e+=t#累加当前项到sum_ei+=1#准备计算下一项print("自然对数e的近似值为:",sum_e)3.3.2求最大数和最小数求数据中的最大数和最小数的算法类似,可以采用“打擂”算法。以求最大数为例,可以先将第一个数作为当前的最大数,然后与其他数逐个比较,若发现较大的数,则用该数替换当前的最大数。【例3-12】编写程序,求区间[100,200]内10个随机整数中的最大数。importrandomx=random.randrange(100,201)#产生一个[100,200]之间的随机数xmax_num=x#设定初始最大数print(x,end="")foriinrange(2,11):#生成10个随机数

x=random.randrange(100,201)#产生另一个[100,200]之间的随机数xprint(x,end="")ifx>max_num:#若新产生的随机数大于当前最大数,则进行替换

max_num=xprint("最大数:",max_num)3.3.3枚举法求数据中的最大数和最小数的算法类似,可以采用“打擂”算法。以求最大数为例,可以先将第一个数作为当前的最大数,然后与其他数逐个比较,若发现较大的数,则用该数替换当前的最大数。【例3-14】编写程序,输出“水仙花数”。foriinrange(100,1000):#遍历所有三位数

ge=i%10#获取个位数字

shi=(i//10)%10#获取十位数字

bai=i//100#获取百位数字

#判断立方和是否等于该数

ifge**3+shi**3+bai**3==i:print(i,end="")#输出符合条件的水仙花数3.3.4递推与迭代递推迭代【例3-16】编写程序,输出斐波那契(Fibonacci)数列的前20项。该数列的第1项和第2项均为1,从第3项开始,每一项均为其前面两项之和,即1,1,2,3,5,8,…。f1=1f2=1print(f1)#输出第1项print(f2)#输出第2项foriinrange(3,21):f3=f1+f2#递推公式

print(f3)#输出第i项

f1=f2f2=f33.3.4递推与迭代递推迭代【例3-17】分数序列求和示例(有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和)。number=20a=2#分子初始值b=1#分母初始值s=0#和的初始值forninrange(1,number+1):s+=a/b#累加当前项的值

t=a#保存当前分子的值

#以下三句是程序的关键

a=a+bb=tprint(s)#输出前20项的和到目前为止,所编写的代码都是以一个代码块的形式出现的。当某些任务(例如求一个数的阶乘)需要在程序中不同位置重复执行时,这会导致代码重复率高,程序变得冗长且难以维护。为了解决这个问题,可以使用函数。在任何编程语言中,函数(在类中称为方法,意义相同)都扮演着至关重要的角色。模块是Python中的代码组织单元,它将函数、类和数据封装在一起,以便于重用。模块通常对应于Python程序文件,Python标准库和第三方库提供了大量可用的模块。第4章Python函数与模块4.1函数的定义和调用在Python程序开发过程中,将完成特定功能且经常使用的代码编写成函数,并放在函数库(模块)中供大家使用,这就是程序中的函数。开发人员应善于利用函数,以提高编码效率,减少重复编写代码的工作量。4.1.1函数的定义4.1.2函数的调用4.1.3Lambda表达式4.1.4函数的返回值4.1.1函数的定义在某些编程语言中,函数声明和函数定义是有区别的(例如,在C语言中,函数声明和定义可以出现在不同的文件中)。而在Python中,函数声明与定义被视为一体。Python中函数定义的基本形式如下:def函数名(形式参数):

函数体

return表达式或值【例4-1】定义一个函数,功能是打印一行“HelloWorld!”,并调用该函数。defSayHello():#函数定义

print("HelloWorld!")#函数体#主程序SayHello()#函数调用4.1.2函数的调用函数的定义明确了其功能。一旦定义完成,程序的任何位置都可以调用该函数。当调用一个函数时,程序的控制权会转移到被调用的函数;当该函数执行完毕后,控制权就会返回给调用者。图4-4所示详细解释了jc函数调用的过程。4.1.2函数的调用【例4-4】利用求正整数阶乘的函数,编写一个计算阶乘和1!+2!+…+n!的函数,并使用该函数求出1!+2!+3!+4!+5!的和。#求正整数阶乘的函数defjc(n):s=1foriinrange(1,n+1):s*=ireturns#求阶乘和的函数defsum_factorials(n):ss=0foriinrange(1,n+1):ss+=jc(i)returnss#主程序i=5k=sum_factorials(i)print("1!+2!+3!+4!+5!=",k)4.1.3Lambda表达式Lambda表达式用于声明匿名函数,即不具备名称的临时小函数。它只能包含一个表达式,该表达式的计算结果即为函数的返回值,不允许包含其他复杂的语句,但可以在表达式中调用其他函数。例如,下面的代码定义了一个Lambda表达式:f=lambdax,y,z:x+y+zprint(f(1,2,3))执行以上代码的输出结果为:6这段代码等价于以下常规函数的定义:deff(x,y,z):returnx+y+zprint(f(1,2,3))4.1.4函数的返回值函数并不一定有返回值。例4-1和例4-2展示了一个无返回值函数的例子;而例4-3和例4-4则给出了一个带返回值的函数示例。函数调用时的参数传递实现了从外部向函数内部输入数据,而函数的返回值则解决了函数向外部输出信息的问题。【例4-6】定义一个函数,计算圆的面积,并打印出给定半径圆的面积。#定义函数circle1,直接打印出圆的面积defcircle1(r):#函数定义

area=3.14*r*r#计算圆的面积

print("半径为",r,"的圆的面积为:",area)#主程序circle1(3)#函数调用4.2函数参数在学习Python函数时,常见的问题主要包括形参与实参的区别、参数的传递与修改,以及变量的作用域。接下来,我将逐一进行讲解。4.2.1函数形参和实参的区别4.2.2参数的传递4.2.3函数参数的类型4.2.4变量的作用域4.2.1函数形参和实参的区别在函数定义中,参数被称为形参,例如例4-2中的SayHello函数中的s,以及例4-3中的jc函数中的n。如果形参的数量超过一个,各参数之间用逗号分隔。在定义函数时,形参并不代表任何具体的值,只有在函数调用时,具体的值才会被赋给形参。调用函数时传入的参数称为实参,比如在例4-2中调用SayHello函数时传入的字符串参数"Hello!",以及在例4-3中调用jc函数时传入的变量参数i。4.2.2参数的传递在大多数高级语言中,理解参数的传递方式一直是一个难点和重点。这一问题并不那么直观,但如果不理解,就很容易在编程时出错。接下来,我们将探讨Python中函数参数的传递机制。在讨论之前,需要明确的一点是:在Python中,“一切皆对象”,变量存储的是对象的引用。这一概念可能有些难以理解,但在Python中,所有数据类型,包括我们常用的字符串和整型,都是对象。为了验证这一点,我们可以进行如下测试:x=2y=2print(id(2))print(id(x))print(id(y))z='hello'print(id('hello'))print(id(z))4.2.2参数的传递在这里,我们需要解释一下id()函数的作用。id(object)函数返回对象object的唯一标识符(即在内存中的地址)。id()函数的参数类型是对象,因此在语句id(2)中并不会报错,这表明数字2在Python中被视为一个对象。从结果可以看出,id(x)、id(y)和id(2)的值是相同的,而id(z)和id('hello')的值也一致。这表明在Python中,一切皆对象,像2和'hello'这样的值都是对象,只不过2是整型对象,而'hello'是字符串对象。在上面的例子中,x=2的实际处理过程如下:首先,Python会申请一段内存来存储整型值2,并将变量x指向这个对象,实际上就是指向这段内存(这与C语言中的指针概念有些相似)。由于id(2)和id(x)返回的结果相同,因此可以推断id()函数在作用于变量时,返回的是变量所指向对象的内存地址。在这个意义上,可以将x看作是对象2的一个引用。同理,y=2也意味着变量y指向同一个整型对象2,如图4-6所示。4.2.3函数参数的类型在C语言中,调用函数时必须严格遵循函数定义时的参数个数和类型,若不符合规定将会导致错误。然而,在Python中,函数参数的定义和传递方式则灵活得多。这种灵活性使得Python能够更方便地处理各种情况,允许开发者在调用函数时不必过于担心参数的具体类型和数量。位置参数默认参数和关键参数可变长度参数序列作为参数【例4-10】改进SayHello函数,使其能够输出多行字符串。调用该函数打印三行“Hello!”。defSayHello(s,n):#函数定义

foriinrange(1,n+1):print(s)#主程序SayHello("Hello!",3)#位置参数4.2.4变量的作用域引入函数的概念后,变量的作用域问题随之出现。变量的作用域是指变量起作用的范围。一个变量在函数外部定义和在函数内部定义,其作用域是不同的。此外,使用特殊关键字定义的变量也会改变其作用域。本节将讨论变量的作用域规则。。局部变量全局变量以下是一个局部变量使用的示例:deffun():x=3count=2whilecount>0:print(x)count-=1fun()print(x)#这里会报错:NameError:name'x'isnotdefined4.3闭包和函数的递归调用闭包是一个函数,可以捕获并记住其外部作用域的变量,而递归调用是一个函数在其定义中直接或间接地调用自身以解决问题。4.3.1闭包4.3.2函数的递归调用4.3.1闭包在Python中,闭包(closure)是指函数内部定义嵌套函数的特性。嵌套函数可以被视为一个对象,因此可以将其作为定义它的外部函数的返回值。以下是一个使用闭包的示例:deffunc_lib():defadd(x,y):returnx+yreturnadd#返回函数对象fadd=func_lib()#获取闭包函数print(fadd(1,2))#输出结果为3在这个示例中,func_lib函数内部定义了一个嵌套函数add(x,y),并将其作为func_lib的返回值。运行fadd(1,2)后,输出结果为3。4.3.2函数的递归调用递归调用递归调用的执行过程函数在执行过程中直接或间接地调用自身,这种调用方式称为递归调用。Python语言支持递归调用。【例4-22】函数递归调用示例(求1到5的平方和)。deff(x):ifx==1:#递归调用结束的条件

return1else:return(f(x-1)+x*x)#调用f()函数本身print(f(5))在调用f函数的过程中,如果直接再次调用f函数,则称为直接调用本函数。而如果在调用f1函数时需要调用f2函数,而在f2函数中又调用f1函数,则称为间接调用本函数,如图4-8所示。4.3.2函数的递归调用递归调用递归调用的执行过程递归调用可分为两个关键阶段:递推和回归。(1)递推阶段: 函数不断调用自身,每次调用都会将当前状态压入栈中。 每次递归调用都会检查终止条件。 这个过程持续到满足终止条件为止。(2)回归阶段: 从栈顶开始,逐层返回并处理结果。 每完成一层处理,就从栈中弹出相应的状态。 这个过程持续到栈为空,即返回到初始调用处。图4-9所示展示了例4-23中递归调用的详细过程,直观地呈现了递推和回归的各个阶段。4.4Python内置函数内置函数(built-infunctions)也称为系统函数或内建函数,是Python语言本身提供的一套随时可用的函数库。这些函数涵盖了多个领域,其中最常用的包括数学运算函数、类型转换函数以及随机数生成函数等。4.4.1数学运算函数4.4.2集合操作函数4.4.3字符串函数4.4.4反射函数4.4.5I/O函数4.4.1数学运算函数数学运算函数主要用于执行各种算术运算。这些函数的详细信息可参见表4-3。这些内置的数学函数大大简化了程序员在处理数学计算时的工作,提高了代码的效率和可读性。4.4.2集合操作函数Python内置的集合操作函数用于执行各种集合相关的操作,如创建集合、转换数据类型、排序、查找最大最小值、计算长度等,帮助简化集合数据的处理,具体说明如表4-4所示。4.4.3字符串函数常用的Python字符串操作包括字符串的替换、删除、截取、复制、连接、比较、查找和分割等。具体的字符串函数如表4-5所示。4.4.3字符串函数4.4.4反射函数反射函数主要用于获取类型、对象的标识、基类等操作,如表4-6所示。4.4.5I/O函数I/O函数主要用于输入/输出操作,相关说明如表4-7所示。4.5模块模块(module)是Python中用于逻辑组织代码的工具。通过将相关的代码分配到一个模块中,可以使代码更加结构化、易于理解和维护。简单来说,模块就是一个保存了Python代码的文件,其中可以定义函数、类和变量。在Python中,模块的概念与C语言中的头文件或Java中的包类似。例如,在Python中,如果要使用sqrt函数计算平方根,就需要通过import关键字引入math模块。接下来,我们将学习Python中模块的相关内容。4.5.1import导入模块4.5.2自定义模块4.5.3常用标准模块4.5.1import导入模块导入模块的方式模块位置的搜索顺序列举模块内容在Python中,可以使用import关键字来导入一个模块。其基本语法如下:import模块名

例如,要引用math模块,可以在代码的开头使用以下语句导入:importmath#导入math模块在导入模块后,调用模块中的函数时需要使用“模块名.函数名”的形式。例如:importmath#导入math模块print(f"50的平方根是:{math.sqrt(50)}")#调用sqrt函数计算平方根y=math.pow(5,2)#使用pow函数计算5的平方print(f"5的2次方是:{y}")#输出结果:25.04.5.1import导入模块导入模块的方式模块位置的搜索顺序列举模块内容当导入一个模块时,Python解释器会按照以下顺序查找模块的位置。(1)当前目录。首先,Python会在当前目录中查找模块。(2)PYTHONPATH环境变量。如果在当前目录找不到模块,Python会继续在PYTHONPATH环境变量指定的目录中查找。(3)默认安装目录。如果上述两步都没有找到,Python会查找安装过程中确定的默认目录。模块的搜索路径存储在sys模块的sys.path变量中。这个变量包含了当前目录、PYTHONPATH中指定的目录,以及安装时设定的默认目录。例如,以下代码可以查看Python的模块搜索路径:>>>importsys>>>print(sys.path)4.5.1import导入模块导入模块的方式模块位置的搜索顺序列举模块内容dir()函数返回一个按字母顺序排列的字符串列表,列出模块中定义的所有变量、函数和类等。例如,以下是一个简单的示例:importmath#导入math模块content=dir(math)#获取math模块中的所有内容print(content)#输出内容在这个列表中,除了Python内置的特殊变量(例如_doc_、_name_等)外,还包括了模块math中定义的函数和常量,如sqrt、pi、sin等。这使得dir()函数成为了解模块内容和函数列表的有用工具。4.5.2import导入模块在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。例如,假设有一个文件fibo.py,在fibo.py中定义了三个函数:add()、fib()和fib2()。以下是fibo.py文件的示例代码:#fibo.py-斐波那契数列模块deffib(n):#定义生成到n的斐波那契数列的函数

a,b=0,1whileb<n:print(b,end='')a,b=b,a+bprint()#输出换行deffib2(n):#定义返回到n的斐波那契数列的函数

result=[]a,b=0,1whileb<n:result.append(b)a,b=b,a+breturnresultdefadd(a,b):#定义两个数相加的函数

returna+b4.5.2import导入模块在fibo.py文件中,定义了三个函数:

fib(n):打印出小于n的所有斐波那契数。

fib2(n):返回一个包含小于n的所有斐波那契数的列表。

add(a,b):返回a和b的和。这样,fibo.py就成为了一个名为fibo的模块。接下来,可以在其他文件中使用这个模块。例如,在test.py文件中:#test.pyimportfibo#导入自定义模块fibo#使用模块名称调用函数fibo.fib(1000)#输出:1123581321144233377610987print(fibo.fib2(100))

温馨提示

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

评论

0/150

提交评论