Python语言基础与实践教程-案例驱动的编程入门 课件 第4-7章 控制结构-文件与异常处理_第1页
Python语言基础与实践教程-案例驱动的编程入门 课件 第4-7章 控制结构-文件与异常处理_第2页
Python语言基础与实践教程-案例驱动的编程入门 课件 第4-7章 控制结构-文件与异常处理_第3页
Python语言基础与实践教程-案例驱动的编程入门 课件 第4-7章 控制结构-文件与异常处理_第4页
Python语言基础与实践教程-案例驱动的编程入门 课件 第4-7章 控制结构-文件与异常处理_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

Python基础与应用主讲:TheIntroductionandApplicationofPythonPart4第四章04控制结构ControlStructures学习内容让程序学会选择与重复4.1控制结构简介04控制结构ControlStructures核心概念:控制结构是程序执行流程的“指挥官”,决定代码何时执行、执行多少次。三大基本结构:顺序结构:按代码编写顺序逐行执行。分支结构:依据条件真伪选择执行路径(本章重点)。循环结构:反复执行某段代码直至条件不再满足(本章重点)。4.2分支结构(Branching)if语句家族单分支(if):满足条件执行A,不满足则跳过。双分支(if-else):满足条件执行A,否则执行B。多分支(if-elif-else):在多个互斥条件中选择一个。提示:elif可以有多个,但顺序很重要,程序会执行第一个满足的分支。嵌套if:在一个if块中再嵌套另一个if,处理更复杂的子条件判断。4.2.1if语句单分支的if语句单分支的if语句是Python中最简单的条件判断形式,它仅包含一个条件和一个代码块。如果条件为真(True),则执行该代码块;如果条件为假(False),则跳过该代码块,继续执行后续代码。单分支的if语句的工作流程如图4-1所示。语法解释如下:if:Python关键字,意思是“如果”,用来开启条件判断。condition:条件表达式,可以是比较、是否等于等能得到True或False结果的代码。“:”:英文冒号,是语法要求,用来分隔“条件”和“要执行的代码块”。缩进的代码块:当if条件为True时,程序会执行的代码。4.2.1if语句单分支的if语句在这个例子中,程序会获取你输入的人口数。如果人口数在100万到500万之间(不含500万),那么就会打印“该城市属于三线城市”。如果人口数不符合这个范围,程序就不会有任何输出,直接结束。4.2.1if语句双分支语句(if-else)双分支if-else语句是一种能根据条件真假,让程序在两种互斥执行路径中选择的控制结构,解决“满足条件做A,不满足做B”的逻辑需求。它提供了两种选择,非此即彼。其核心思想是如果某个条件成立,就做这件事;否则(else),就做另外一件事。双分支语句(if-else)的工作流程如下图4-2所示。语法解释:else:Python关键字,意思是“否则”,搭配if处理“条件不成立”的情况。if后面缩进的代码,是条件为True(成立)时要执行的内容;else后面缩进的代码,是条件为False(不成立)时要执行的内容。4.2.1if语句双分支语句(if-else)这段代码用于判断一个城市的常住人口是否符合三线城市的定义。具体功能如下:从用户输入获取城市人口数据(单位为万人),并转换为浮点数;如果城市人口在100万到500万之间(含100万,不含500万),则输出“该城市属于三线城市”;否则输出“该城市不属于三线城市”。4.2.1if语句双分支语句(if-else)课堂作业:闰年的条件:能被4整除,但不能被100整除;或者能被400整除。要求:键盘输入年份,输出是否为闰年!4.2.1if语句多分支语句(if-elif-else)多分支结构用于在一个控制流中处理多个条件。它扩展了基本的if-else结构,允许你根据不同的条件执行不同的代码块。只有当所有前面的if和elif条件都为假时,才会执行else部分。多分支语句(if-elif-else)的工作流程如下图4-3所示。语法解释:ifcondition1:启动条件判断流程,检查condition1是否成立;elifcondition2:Python关键字(全称“elseif”),用于在前面的if或elif条件不成立时,检查condition2。若成立,则执行对应代码块;elifcondition3:类似elifcondition2,可继续扩展更多分支,依次检查新条件;else:当所有if和elif的条件都不成立时,执行else下的代码块。一个结构中最多有一个else。4.2.1if语句多分支语句(if-elif-else)!!!elif可以有多个,但必须出现在if之后,else之前;else是可选的。这段代码根据输入的城市人口数(单位:万人),判断该城市属于哪一等级:如果人口≥1000万,输出“一线城市”;如果人口在500万到1000万之间,输出“二线城市”;如果人口在100万到500万之间,输出“三线城市”;否则输出“四线及以下城市”。4.2.1if语句if语句的嵌套Python语言支持在一个if或elif代码块中再写一个新的if判断语句,这就是所谓的嵌套if语句(NestedifStatements)。这种结构允许我们在某个条件成立的前提下,进一步判断更多的子条件。语法解释:if外层条件:先判断外层条件是否为真。如果为真,进入内部判断。if内层条件:在外层条件为真的前提下,继续判断内层条件。else(内层):如果内层条件不成立,则执行这里的代码。else(外层):如果外层条件一开始就不成立,则直接跳到外层的else执行。4.2.1if语句if语句的嵌套这段代码使用的是if-else嵌套结构,根据用户输入的城市人口数,判断城市的等级:如果人口超过500万,输出“该城市为二线及以上城市”;否则,如果人口超过200万,输出“该城市为三线城市”;否则,输出“该城市为四线城市及以下”。4.2.2match语句match语句match-case语句,是Python3.10+引入的一种新的条件控制结构。特点:采用“模式匹配”而非简单的布尔判断。语法解释:match用于对目标值进行模式匹配case关键字后可以跟具体的值,类型,变量结构,守卫条件等_表示通配符:用作“默认匹配”4.2.2match语句match语句示例示例代码的具体功能如下:接收用户输入的年份,转换为整数。使用match-case判断年份是否为2024或2020,输出对应人口数据。若年份不匹配,执行_分支,提示无该年人口数据。4.2.3三元运算符三元运算符三元条件运算符(TernaryConditionalOperator)是Python提供的一种简洁表达条件判断的语法形式。它允许开发者在一行内根据布尔条件返回不同的结果,实现传统if-else语句的表达式级替代。4.2.3三元运算符三元运算符示例三元条件运算符(TernaryConditionalOperator)是Python提供的一种简洁表达条件判断的语法形式。它允许开发者在一行内根据布尔条件返回不同的结果,实现传统if-else语句的表达式级替代。4.3循环结构(Loops)循环通过程序中的循环语句,计算机能高效执行重复任务,无需大量重复代码。这使得程序能像自然现象或自动化机器一样,有条不紊地处理一系列相似事件。Python提供了两种循环结构,包括while循环和for循环。4.3.1

for循环for...in语句for...in语句是python中用于遍历可迭代对象(如列表、元组、字符串、字典等)的一种循环方式。4.3.1

for循环for...in语句可迭代对象类型:可迭代对象是python中支持逐个取出元素的数据结构,如列表、元组、字符串、字典等。它们的作用是在循环中提供一组可顺序访问的元素,方便进行批量处理或遍历操作。

4.3.1

for循环for...else语句for...else语句是python中特有的一种循环结构,它在for循环正常执行完毕后自动执行else代码块,若循环中途被break语句打断,则else块不会执行。这种结构常用于查找类操作中,在遍历未提前终止的情况下执行收尾逻辑。语法解释:for...else语句表示当循环未被break中断时,自动执行else块中的代码,用于处理循环正常结束后的逻辑。4.3.1

for循环for...else语句示例这段代码的功能是:在列表years中查找用户输入的目标年份target,如果找到则输出“找到目标年”,否则输出“未找到目标年”。4.3.1

for循环嵌套for循环嵌套的for循环(即一个for循环内部又包含另一个for循环)常用于处理二维数据结构(如嵌套列表)、生成排列组合、或在多个维度上进行遍历。

具体功能如下:定义年份列表years;定义城市列表cities和对应人口数据popu;嵌套循环依次遍历年份和城市,输出格式化字符串展示数据,结果为每年份下所有城市的人口数据依次被打印出来。4.3.1

for循环range()函数range()是python中用于生成整数序列的内置函数,常用于for循环控制循环次数。这段代码解释如下:range(2020,2024,1)生成一个从2020开始,到2023结束的整数序列,其中起始值是2020,结束值是2024(不包括)。步长为1,表示每次递增1。使用list()函数将range()对象转换为列表后,得到的序列是[2020,2021,2022,2023],即包含了从2020到2023的所有年份。4.3.2

while循环while循环基础while循环作为python中的基本循环语句之一,允许程序在满足特定条件的前提下不断执行某段代码,直到条件不再成立为止。它适用于循环次数不确定、依赖变量变化的场景。while循环的核心是条件表达式,它会在每次循环开始前判断条件是否为真,只有条件为“真”时,才会执行循环体。如果条件为“假”,循环将终止。语法解释:每次循环前会判断条件是否成立,若为“真”则执行循环体,常配合更新变量以避免死循环,适用于次数不确定的循环场景。4.3.2

while循环while循环基础while循环作为python中的基本循环语句之一,允许程序在满足特定条件的前提下不断执行某段代码,直到条件不再成立为止。它适用于循环次数不确定、依赖变量变化的场景。while循环的核心是条件表达式,它会在每次循环开始前判断条件是否为真,只有条件为“真”时,才会执行循环体。如果条件为“假”,循环将终止。语法解释:每次循环前会判断条件是否成立,若为“真”则执行循环体,常配合更新变量以避免死循环,适用于次数不确定的循环场景。4.3.2

while循环while循环基础示例这段代码解释如下:定义变量year=2020,并设置whileyear<=2023作为循环条件,表示只要年份不超过2023,就持续执行循环体。在每次循环中,使用print()输出当前年份,并将year增加1,以推动循环向终止条件前进,避免陷入无限循环。注意:引号应为英文格式,否则会导致语法错误。4.3.2

while循环while…else结构while...else是python中的一种循环结构,用于在while循环条件不再满足并正常结束时执行额外的else代码块。它通常用于在循环未被break中断的情况下执行一些“收尾”操作。语法解释:当while条件为“真”时,循环体会不断执行,并在每次迭代中更新变量;如果循环自然结束(条件变为“假”),则执行else块中的代码;但如果循环通过break提前终止,else部分不会执行。4.3.2

while循环嵌套while循环嵌套while循环允许在一个循环体内再嵌入另一个循环,从而在每次外层循环执行的基础上,完成对内层数据的多次遍历或比较。这在处理如二维列表、矩阵运算或多维数据分析时非常常见。4.3.3循环控制语句break语句break语句用于立即终止当前循环,无论循环条件是否仍为“真”。当程序执行到break时,会跳出整个while或for循环,控制权转移到循环之后的第一条语句。它常用于在满足某个特定条件时提前结束循环。语法解释:在while循环中,break用于在满足特定条件时提前终止循环,跳出循环体,继续执行后续代码。在for循环中,break用于在满足特定条件时终止循环,停止对可迭代对象的进一步遍历。4.3.3循环控制语句break语句示例break语句用于立即终止当前循环,无论循环条件是否仍为“真”。当程序执行到break时,会跳出整个while或for循环,控制权转移到循环之后的第一条语句。它常用于在满足某个特定条件时提前结束循环。代码解释如下:代码从year=2020开始,使用whileyear<=2023控制循环,依次打印年份信息。每次循环结束后,将year增加1,逐步推进年份。在循环体中,当年份等于2022时,触发if判断,执行break语句立即终止循环,因此只会输出2020和2021两年的信息。4.3.3循环控制语句continue语句continue语句用于跳过当前循环中的剩余代码,直接进入下一轮循环。它常用于在满足特定条件时暂时跳过本次迭代的处理逻辑,但不终止整个循环。与break不同,continue不会退出循环,而是跳过当前这次执行,继续下一次判断与执行。语法解释:在while循环中,当满足特定条件时,continue会跳过当前循环的剩余部分,直接进入下一次迭代。在for循环中,当满足条件时,continue会跳过当前元素的处理,继续处理下一个元素。4.3.3循环控制语句continue语句示例代码解释如下:使用foryearinrange(2020,2024)遍历从2020到2023的年份。每次循环将当前年份赋值给变量year,用于后续判断与输出。当年份为2021时,触发ifyear==2021条件,执行continue跳过本次循环,不执行print。因此输出结果将省略2021,只打印2020、2022和2023。4.3.4推导式循环语句推导式循环语句除了for和while循环语法外,还有一种简洁的单行循环结构——推导式。列表推导式、字典推导式和集合推导式都是通过嵌套表达式来生成新数据结构的高效方法。语法解释:列表推导式:通过在一行代码中结合循环和条件表达式,快速生成符合特定规则的列表。集合推导式:类似于列表推导式,但生成的是集合,集合会自动去重,并可以通过条件筛选元素。字典推导式:在列表推导式的基础上,创建键值对形式的字典,按指定规则映射键和值。4.3.4推导式循环语句推导式循环语句示例代码解释如下:第1行:定义一个包含年份的列表years,其中包含四个整数元素2023,2022,2021,2020。第2行:使用列表推导式生成新列表half_years,将years中的每个元素整除2,并对结果进行存储。第3行:打印列表half_years,输出结果为[1011,1011,1010,1010]。本章小结重难点回顾:熟练运用多分支if-elif-else。掌握match的模式匹配。理解for和while循环及其嵌套逻辑。break和continue的使用注意事项。本章小结课后思考:什么时候用for?什么时候用while?match语句相比if语句在处理固定模式时有什么优势?期待第五章ThanksPython基础与应用主讲:TheIntroductionandApplicationofPythonPart5第五章05函数Function学习内容函数的作用是将重复的代码块封装起来,通过调用执行特定任务,从而提高代码的复用性、模块化和可读性。第一节函数概述05函数Function5.1函数概述5.1.1

认识函数函数是一段具有特定功能的代码块,它接收输入参数,经过处理后返回结果。就像数学中的函数一样,给定相同的输入,总是产生相同的输出。在Python中,函数是组织代码的基本单元,将相关的操作封装在一起。5.1函数概述5.1.1

认识函数语法解释:def关键字必须小写,后面紧跟一个空格,这是Python函数定义的固定格式;函数名遵循标识符命名规则,推荐使用小写字母和下划线的组合,如circle_area;参数列表用圆括号包围,多个参数用逗号分隔;冒号是函数定义语法的必需部分,标志着函数头的结束和函数体的开始;函数体必须相对于def语句缩进,通常使用4个空格,这是Python语法的强制要求;return语句可以出现在函数的任何位置,一旦执行就会结束函数并返回指定值,如果函数没有return语句或return后没有值,则返回None。5.1函数概述5.1.2 调用函数1)什么是函数调用(call)?

函数调用是将已定义的函数投入实际使用的过程,通过函数名加圆括号的形式来执行函数内部的代码逻辑。当程序执行到函数调用语句时,控制权会转移到被调用的函数内部,执行完毕后再返回到调用位置继续执行后续代码。函数是被动的!5.1函数概述5.1.2 调用函数函数调用的基本语法为`函数名(参数值)`,如果函数有返回值,通常需要用变量接收结果。5.1函数概述5.1.2 调用函数2)形式参数(Parameter)`形式参数`是函数定义时在参数列表中声明的变量名,它们充当函数内部的占位符,用于接收调用时传入的具体数值。例子中,region和indicator本质上是函数内部的变量名。它们在函数定义时声明:调用该函数需传入两个输入数据,其中第一个实参值将绑定给形参region,第二个实参值将绑定给形参indicator。5.1函数概述5.1.2 调用函数3)实际参数(Argument)`实际参数`是函数调用时传递给函数的具体数值或变量,它们是真正参与函数运算的数据。实参与形参之间存在一一对应的映射关系,调用时实参的值会被传递给相应位置的形参。代码中,'呼和浩特市'和'包头市'是传递给形式参数region的实际参数;'总人口'和'GDP'是传递给形式参数indicator的实际参数。第二节传递实参05函数Function5.2传递实参5.2.1 位置实参位置实参是最直观的参数传递方式(图5-2),它严格按照参数在函数定义中的位置顺序进行匹配。在函数调用过程中,实参是赋予函数运行的具体数据,而传递方式决定了数据如何被函数接收和处理。Python提供了多种实参传递机制,包括位置实参、关键字实参、默认值等。5.2传递实参5.2.1 位置实参示例所有参数都必须提供:如果函数定义中没有为某个参数设置默认值,那么在调用时就必须为该参数提供一个值,否则Python会抛出TypeError。5.2传递实参5.2.2 关键字实参关键字传递(KeywordArguments)是一种在函数调用时通过显式指定参数名来传递值的方式,它极大地提升了代码的可读性并减少了出错的可能性,尤其适用于参数数量较多或顺序不易直观判断的情况。注意:

关键字实参的名称必须与函数定义中的形参名称完全一致。同一个参数不能既用位置方式又用关键字方式赋值。一旦使用关键字实参,它之后的参数都必须用关键字形式提供,以避免歧义。5.2传递实参5.2.3 默认值默认值机制为函数参数提供了预设值,当调用时未提供相应实参时,参数将自动采用默认值。注意:

在函数定义中,必须将非默认参数放在前面,默认参数放在后面。这种顺序要求确保了函数调用时参数绑定的明确性。例如,deffunc(a="default",b):这样的定义是非法的,因为Python无法确定func(10)中的10应该赋给a还是b。5.2传递实参5.2.3 默认值默认值机制为函数参数提供了预设值,当调用时未提供相应实参时,参数将自动采用默认值。注意:

在函数定义中,必须将非默认参数放在前面,默认参数放在后面。这种顺序要求确保了函数调用时参数绑定的明确性。例如,deffunc(a="default",b):这样的定义是非法的,因为Python无法确定func(10)中的10应该赋给a还是b。5.2传递实参5.2.4 可变位置参数(*args)可变位置参数允许函数接收任意数量的位置实参,这些实参会被自动打包成元组供函数使用,具体而言星号`*`后跟随变量名,即可得到可变位置参数。代码解析如下:第1行:将原有的位置参数indicator改为可变位置参数*indicators;第4行:遍历接收到的参数元组indicators;第8行:调用get_statistic函数,"呼和浩特市"为位置参数region,"总人口"、"GDP"为可变位置参数*indicators。5.2传递实参5.2.5 可变关键字实参(**kwargs)可变关键字参数提供了接收任意数量关键字实参的能力,这些实参会被组织成字典结构供函数处理。代码解析如下:第1行:将原有的位置参数indicator改为可变位置参数*indicators;第4行:遍历接收到的参数元组indicators;第8行:调用get_statistic函数,"呼和浩特市"为位置参数region,"总人口"、"GDP"为可变位置参数*indicators。第三节返回值05函数Function5.3返回值返回值合理使用返回值能使函数在程序中高效地传递和处理数据。函数执行操作后可以通过返回值将处理结果传递出来。返回值可以是数字、字符串等简单数据类型,也可以是列表、字典等复杂数据结构,甚至可以返回多个结果。5.3返回值5.3.1return语句return语句是函数返回结果的重要语句。当程序执行到return语句时,函数会立即结束运行,并将结果返回给调用者,return后面的代码不会继续执行。如果函数中没有写return语句,或者return后面没有任何值,Python会默认返回None。这是Python函数的标准行为。代码解析如下:第4,7行:返回单个值,例如查询"呼和浩特市"的"总人口",那么程序将执行到第4行并返回289.7,不会接着运行5~9行;第9行:如果在调用函数期间,region没有匹配项,则返回None5.3返回值5.3.2返回None当函数没有显式编写return语句,或者return后不跟任何值时,函数会默认返回None。代码解析如下:第4,7行:返回单个值,例如查询"呼和浩特市"的"总人口",那么程序将执行到第4行并返回289.7,不会接着运行5~9行;第9行:如果在调用函数期间,region没有匹配项,则返回None5.3返回值5.3.3

返回多个值可以通过return语句返回多个值。第四节Lambda匿名函数05函数Function5.4Lambda匿名函数Lambda匿名函数Lambda函数是一种匿名的、单行的轻量级函数,其核心特点在于通过单个表达式实现功能,并自动返回该表达式的结果。与普通函数不同,Lambda函数没有正式的函数名称,所有运算和逻辑处理均需在一行内完成。语法解释:使用lambda关键字定义一个匿名函数,参数列表为该函数接受的参数,多个参数之间用逗号分隔,冒号后的单个表达式为函数体。参数列表:支持位置参数(如x)、默认参数(如x=1)、可变参数(如*args),用于接收外部传入值。单个表达式:函数的执行逻辑,必须为单行且有返回值,执行结果自动作为返回值(无需return关键字)。5.4Lambda匿名函数Lambda匿名函数示例代码解释:第1行:定义普通函数add,包含形参a和b,用于接收两个数值。第2行:函数体执行a+b的加法运算,并通过return语句返回计算结果。第5行:使用lambda关键字定义匿名函数,直接指定参数列表a,b和返回值a+b,并将其赋值给变量lambda_add。第8行:调用普通函数add,传入实参3和5,打印返回值8。第9行:调用lambda函数lambda_add,传入相同实参,打印返回值8,验证二者功能等价。5.4Lambda匿名函数Lambda匿名函数特性特性:无需显式return。逻辑仅限单行表达式。匿名与即席(临时、当场、不事先准备)使用。本章小结函数定义与调用机制:形参与实参的动态绑定五种参数传递方式:位置参数关键字参数默认值参数可变位置参数(*args)可变关键字参数(**kwargs)返回值应用:单值、多值、None的使用匿名函数(Lambda):语法规范与适用场景作为轻量级工具在高阶函数中的优势难点:Lambda函数的规范编写本章小结课后思考:掌握函数设计原则与技巧,构建模块化、高效稳健的程序期待第六章ThanksPython基础与应用主讲:TheIntroductionandApplicationofPythonPart6第六章06面向对象程序设计Object-OrientedProgramming学习内容4.1控制结构简介06面向对象程序设计Object-OrientedProgramming第一节面向对象编程概述什么是面向对象程序设计(OOP)面向对象程序设计的核心思想在于将现实世界中的事物抽象为程序中的“对象”。这些对象既包含描述其特征的数据(属性),也包含操作这些数据的行为(方法)。这种思想符合人类认识世界的自然方式,例如我们将汽车、房屋、城市看作独立对象,它们各自拥有独特的属性和行为。图:城市对象的属性与方法抽象示例核心特征:抽象(Abstraction)|封装(Encapsulation)|继承(Inheritance)|多态(Polymorphism)代码示例:定义一个城市类classCity:

def__init__(self,name,population):

=name#属性:城市名称

self.population=population#属性:人口数量

defget_desc(self):

returnf"{}的人口为{self.population}"beijing=City("北京市",40000);hohhot=City("呼和浩特市",10000)print(beijing.get_desc());print(hohhot.get_desc())运行输出结果北京市的人口为40000呼和浩特市的人口为10000面向对象编程核心:封装属性与方法,通过实例化对象实现代码复用与逻辑解耦Python实现代码面向对象vs面向过程面向过程编程(Procedure-Oriented)核心思想:将程序看作一系列顺序执行的步骤或过程。主要特点:数据与函数分离,结构清晰,执行效率高。局限性:代码难以维护,重用性低,抽象能力有限。面向对象编程(Object-Oriented)核心思想:将数据和操作数据的方法封装在对象中。主要特点:通过封装、继承、多态实现代码重用和扩展。核心优势:更好的代码组织,更高的可维护性和可扩展性。图示:面向过程与面向对象的编程模型对比面向对象的三大核心特性封装(Encapsulation)将数据和方法绑定,形成独立单元。隐藏细节,暴露接口,实现信息隐藏。继承(Inheritance)基于现有类创建新类,复用属性方法。支持层次化设计,体现“是一种”关系。多态(Polymorphism)不同对象对同一消息做出不同响应。实现“一个接口,多种实现”,灵活扩展。4.1控制结构简介06面向对象程序设计Object-OrientedProgramming第二节类与对象面向对象编程基础·核心概念解析类的定义与创建类(Class)是创建对象的模板或蓝图。它定义了对象拥有的属性(数据)和方法(行为)。在Python中,我们使用class关键字来定义一个类。class

ClassName:"""类的文档字符串"""#属性定义#方法定义类(图纸)与对象(房屋)的关系核心思想:类是抽象的概念(图纸),对象是具体的实例(房子)。对象的实例化核心概念对象(Object)是类的具体实例(Instance)。创建对象的过程称为实例化。每个对象都拥有类定义的属性和方法,但可以有不同的属性值。代码示例(Python)#创建Book类的实例book1=Book("Python编程","张三")book2=Book("Java编程","李四")示例中,book1和book2是两个独立的实例,拥有相同的属性结构但不同的值。类比理解:类是建筑图纸(模板),对象是根据图纸盖好的房子(具体实例)。属性与方法属性(Attribute)对象的状态数据,描述对象的特征。访问:对象.属性名示例:book1.title方法(Method)对象的行为,操作对象数据的函数。调用:对象.方法名()示例:book1.display()关键概念:self参数方法的第一个参数通常是self,它代表对象本身,用于在方法内部访问对象的属性和方法。构造方法__init__核心作用Python中的构造方法,在创建对象时会自动调用,用于初始化对象的属性,为对象赋予初始状态。self参数必须作为方法的第一个参数,它指向新创建的对象实例,通过self可以访问对象的属性和方法。book.pyclass

Book:def

__init__(self,title,author):self.title=title#初始化属性self.author=author#创建对象时自动调用book=

Book("Python编程","张三")4.1控制结构简介06面向对象程序设计Object-OrientedProgramming第三节类封装、继承与多态面向对象编程核心特性解析封装:信息隐藏与接口设计封装的核心是信息隐藏,即对象的内部状态对外部不可见,外部只能通过对象提供的公共方法来访问或修改状态。私有属性(Private)在Python中,通过在属性名前加下划线(如_name)来约定为私有属性,表示不建议外部直接访问。公共方法(Public)提供getter和setter方法来安全地访问和修改私有属性,控制数据流向。核心价值:保护数据不被随意修改,同时提供了清晰的接口,极大地增强了代码的安全性和可维护性。继承:代码复用与扩展核心概念继承是面向对象编程的核心特性之一,允许基于已有的父类(基类)创建新的子类(派生类)。子类自动获取父类的属性和方法,并可进行:扩展:添加新的属性或方法重写:修改父类已有的方法实现inheritance.pyclass

Person:

#父类

def

__init__(self,name):

=name

def

greet(self):

return

f"Hi,{}"class

Student(Person):#继承Person

def

study(self):

return

f"{}isstudying"s=Student("Alice")print(s.greet())#调用继承的方法核心价值:通过继承,Student类无需重复编写name属性和greet方法,直接复用Person类的代码,极大提高开发效率。多继承与方法解析顺序(MRO)多继承特性Python支持子类继承多个父类,极大提升了代码复用性。但当多个父类存在同名方法时,会引发“菱形问题”等方法名冲突。MRO解析原则MRO定义了解释器查找方法的顺序。遵循“深度优先,从左到右”原则,并通过C3线性化算法保证继承关系的一致性,避免二义性。实践查看方法在代码中,可以通过以下两种方式查看类的MRO:1.类名.__mro__2.类名.mro()理解MRO是掌握Python面向对象编程中复杂继承关系的关键多态:一个接口,多种实现多态允许不同类的对象对同一消息(方法调用)做出不同的响应。这通常通过方法重写(MethodOverriding)来实现,极大地提高了代码的灵活性。class

Animal:

def

speak(self):

passclass

Dog(Animal):def

speak(self):

return"Woof!"class

Cat(Animal):def

speak(self):

return"Meow!"def

make_speak(animal):

print(animal.speak())make_speak(Dog())#输出:Woof!此外,Python还支持运算符重载(OperatorOverloading),通过实现特殊方法(如__add__,__str__)来自定义对象的行为,进一步扩展了多态的应用场景。Python中面向对象的独特实现一切皆对象:数字、字符串、函数、类本身都是对象,具有统一的访问接口。特殊方法:通过双下划线方法(如__init__,__str__)自定义对象行为与运算符。动态性:运行时可动态为类或对象添加属性和方法,灵活性极高。属性访问控制:无严格私有属性,通过约定俗成的命名规范(如_attr)实现约束。元类:控制类的创建过程,是Python中实现高级框架和API的核心机制。为什么要学习面向对象编程现代软件工程的支柱主流开发框架(如Django,Flutter)均基于OOP设计,是行业标准。提高代码可维护性与扩展性通过封装、继承和多态特性,有效管理复杂度,降低维护成本。提升抽象编程思维培养抽象、分解和建模能力,帮助我们更好地解决复杂现实问题。Python的强大支持Python的OOP特性简洁且强大,语法糖丰富,是入门和实践的理想语言。综合案例:图书管理系统通过Python实现一个简易的图书管理系统,展示类定义、对象交互与业务逻辑封装。class

Book:

def

__init__(self,title,author,isbn):

self.title=title

self.author=author

self.isbn=isbn

self.is_borrowed=Falsedef

borrow(self):#借书逻辑封装

ifnot

self.is_borrowed:

self.is_borrowed=True

returnTrue

returnFalselib=Library();lib.add_book(Book("Python编程","张三","123456"))#对象交互类与对象定义Book类封装属性,Library类管理集合方法与行为通过borrow方法控制图书状态流转业务逻辑整合实现书籍添加、查找与借阅的完整闭环本章小结类与对象类是模板,对象是实例,是OOP的基础。封装隐藏细节,提供接口,保证数据安全。继承代码复用,扩展功能,建立层次关系。多态灵活扩展,统一接口,提高代码通用性。面向对象编程是现代软件开发的核心思想,掌握它对于构建高质量、可维护的软件至关重要。希望大家能在实践中不断加深理解,灵活运用。期待第七章ThanksPython基础与应用主讲:TheIntroductionandApplicationofPythonPart7第七章07文件与异常处理FileandExceptionHandling学习内容本章重点与难点本章重点KeyPoints文件操作:掌握文本与二进制文件读写文件模式:理解不同文件打开模式选择with语句:安全管理文件资源,自动关闭异常处理:编写健壮程序,应对错误本章难点Difficulties读写复杂性:灵活运用各类读写方法异常设计:合理设计异常捕获与处理学习建议:多动手编写代码,尝试处理不同类型的文件和异常情况,加深对文件操作机制的理解。第一节文件操作07文件与异常处理FileandExceptionHandling7.1文件操作-文件与文件路径文件类型分类文本文件:基于字符编码(如UTF-8),可直接阅读,如.txt,.py二进制文件:以字节为单位存储,需特定软件解析,如图片、视频文件路径表示绝对路径(AbsolutePath)从根目录开始的完整路径,指向唯一位置。例:C:\Users\user\file.txt相对路径(RelativePath)相对于当前工作目录的路径,灵活便捷。例:./data/file.txt跨平台兼容:使用os.path.join()处理路径分隔符路径检查:使用os.path.exists()验证路径存在性路径表示示例绝对路径(AbsolutePath)Windows系统C:\Users\Username\Documents\file.txtLinux/macOS系统/home/username/documents/file.txt相对路径(RelativePath)当前目录下(CurrentDirectory)./config/settings.ini上一级目录下(ParentDirectory)../data/input.txt核心区别:绝对路径从根目录(如C:\或/)开始,是文件的完整地址;相对路径相对于当前工作目录,使用.和..进行导航,更加灵活且与具体盘符无关。文件操作基本流程1.打开文件使用open()函数,指定文件名和打开模式,获得文件对象。2.操作文件通过文件对象进行读、写、追加等核心数据处理操作。3.关闭文件使用close()方法关闭文件,释放系统资源,确保数据安全。文件打开模式详解'r'只读模式(默认)文件不存在则报错,只能读取内容。'w'写入模式文件存在则覆盖,不存在则创建新文件。'a'追加模式写入内容到文件末尾,保留原有数据。'b'二进制模式与其他模式组合使用(如'rb','wb')。'+'更新模式允许同时对文件进行读写操作。常见组合示例'rb'读二进制,'wb+'写二进制并可读。注意事项:使用'w'模式时务必小心,它会直接清空并覆盖原有文件内容,无法恢复。建议在不确定时先使用'r'模式查看。使用with语句管理资源手动关闭(不推荐)file=open('example.txt','r')content=file.read()file.close()#必须手动调用风险:容易忘记调用close(),导致资源占用。自动关闭(推荐)withopen('example.txt','r')asfile:content=file.read()#代码块结束,文件自动关闭优势:代码块结束自动释放资源,更简洁。核心优势:异常安全(ExceptionSafety)即使在读写过程中发生异常(如IOError),with语句也能确保文件被正确关闭,避免资源泄漏。这是Python中处理文件的最佳实践。进入代码块时自动打开文件,退出时自动关闭,无需手动调用close()方法。文本文件读取方法read()读取整个文件内容,返回字符串。适合小文件快速读取。content=file.read()readline()逐行读取文件内容。适合处理大文件或需要逐行解析的场景。line=file.readline()readlines()读取所有行,返回字符串列表。方便对每一行数据进行处理。lines=file.readlines()核心差异总结:•read():一次性加载,内存占用大,速度快。•readline():逐行加载,内存占用小,适合超大文件。•readlines():列表形式存储,便于索引和随机访问。文本文件读取方法使用forlineinfile逐行读取适合处理大文件,避免内存溢出更省内存,效率更高。核心差异总结:•read():一次性加载,内存占用大,速度快。•readline():逐行加载,内存占用小,适合超大文件。•readlines():列表形式存储,便于索引和随机访问。逐行遍历#逐行读取forlinein

open('file.txt','r'):

print(line.strip())在open()中指定encoding='utf-8'正确处理中文字符避免乱码问题#指定编码with

open('file.txt','r',encoding='utf-8')asf:content=f.read()编码处理二进制文件的读取直接读取字节流适用于图片、音频等非结构化数据,不关心内部结构。#以二进制只读模式打开withopen("image.png","rb")asf:raw_bytes=f.read()#返回bytes类型的字节串结构化解析适用于已知格式的数据(如struct.pack写入),需解析为具体类型。importstructwithopen("data.bin","rb")asf:data=f.read()int_val,float_val=struct.unpack("if",data)核心区别:直接读取关注“流”本身,结构化解析关注“数据结构”与“类型还原”。文本文件写入方法write()方法功能:写入单个字符串。withopen("file.txt","w")asf:f.write("Hello,World!\n")f.write("这是第二行。")writelines()方法功能:写入字符串列表,需手动换行。lines=["第一行\n","第二行\n","第三行"]withopen("file.txt","w")asf:f.writelines(lines)注意事项:使用writelines()时,系统不会自动在列表元素之间添加换行符,需要在每个字符串末尾手动添加'\n'。二进制文件的写入核心原理:数据打包在Python中写入二进制文件,通常需要先将数据序列化为字节串。推荐使用struct模块,它提供了将Python数据类型(如整数、字符串)转换为C语言结构体的机制,便于底层数据交互。代码实现:打包并写入importstruct#定义格式:10字节字符串+整数fmt='10si'data=("Beijing".encode('utf-8'),2186)packed=struct.pack(fmt,*data)withopen("population.bin","wb")asf:f.write(packed)关键要点1.格式定义:使用格式字符(如's'代表字符串,'i'代表整数)定义数据结构。_2.打开模式:务必使用"wb"模式打开文件,确保以二进制方式写入。第二节异常处理07文件与异常处理FileandExceptionHandlingExceptionHandlingMechanism什么是异常?异常(Exception)程序运行时发生的错误或意外情况,会中断程序的正常执行流程。错误示例:除以零#这行代码会引发ZeroDivisionErrorresult=10/0常见异常类型FileNotFoundError尝试打开不存在的文件ZeroDivisionError数学运算中除以零ValueError传入无效的参数值(如转数字失败)TypeError操作或函数应用于错误类型的对象异常捕获:try-except语句基本语法结构(BasicStructure)try:

#可能引发异常的代码

risky_code()exceptExceptionType:

#处理该类型异常的代码

handle_exception()示例:安全读取文件try:f=open("file.txt","r")content=f.read()exceptFileNotFoundError:print("错误:文件不存在!")核心机制:将可能出错的代码放入try块。若发生异常,程序不崩溃,而是跳转到对应的except块执行容错逻辑。异常处理的扩展:else与finallyelse子句仅当try块中没有发生异常时执行。

温馨提示

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

评论

0/150

提交评论