还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《编程基础》教学课件Python欢迎来到《Python编程基础》课程!本课程旨在帮助初学者掌握Python编程的核心概念和技能我们将从基础语法开始,逐步深入到更复杂的主题,如数据结构、函数和模块等Python作为当今最流行的编程语言之一,被广泛应用于网络开发、数据分析、人工智能等领域通过本课程的学习,你将获得扎实的Python编程基础,为未来的编程之旅打下坚实基础无论你是编程新手还是有其他语言经验的开发者,本课程都将为你提供清晰、系统的学习路径,帮助你快速掌握Python的精髓让我们一起开始这段充满乐趣的学习旅程吧!什么是Python简介Python是一种解释型高级编程语言,由荷兰程序员Guido vanRossum于1991年首次发布它的设计哲学强调代码的可读性和简洁性,使得程序员可以用更少的代码表达更多的意思Python的语法简单明了,几乎就像伪代码一样,这使得它特别容易学习和使用同时,它强大的标准库和第三方库使其能够适应各种应用场景的特点Python简单易学跨平台兼容Python的语法设计简洁明Python可以在Windows、了,接近自然语言,降低了学MacOS、Linux等各种操作系习门槛它的代码结构清晰,统上运行,编写一次的代码可使用缩进来表示代码块,提高以在不同平台上执行,大大提了可读性对于初学者来说,高了开发效率和程序的适用范Python是入门编程的理想选围择丰富的库Python拥有庞大的标准库和第三方库生态系统,涵盖了从Web开发到数据分析、科学计算、机器学习等各个领域,使开发者能够快速构建各种复杂的应用程序应用场景Python开发数据分析与人工智能自动化脚本与爬虫WebPython拥有Django、Flask等强大的Web通过NumPy、Pandas、Matplotlib等Python简洁的语法和丰富的库使其成为编框架,使得开发者可以快速构建安全、可库,Python已成为数据科学的首选语言写自动化脚本的理想选择使用扩展的Web应用Django提供了完整的而TensorFlow、PyTorch等深度学习框Selenium、Beautiful Soup等工具,可以MVC架构,而Flask则以其轻量级和灵活性架,使Python在人工智能领域占据主导地轻松实现网页抓取和数据提取功能著称位安装与配置环境Python下载Python访问Python官方网站python.org,根据操作系统选择合适的Python
3.x版本目前推荐使用Python
3.8或更高版本,因为Python2已于2020年正式停止支持安装程序运行下载的安装程序,在Windows系统上请勾选Add PythontoPATH选项,以便在命令行中直接使用PythonMac和Linux用户通常有预装的Python环境验证安装打开命令行或终端,输入python--version或python3--version命令,如果显示版本号,说明安装成功还可以输入python进入交互式环境,测试简单代码常用集成开发环境()IDEPyCharm VisualStudio Code由JetBrains开发的专业Python微软开发的轻量级代码编辑器,IDE,提供智能代码补全、实时通过安装Python扩展可获得出色错误检查、集成调试器和测试工的Python开发体验提供语法高具等功能社区版免费,专业版亮、代码补全、调试支持等功需付费但提供更多高级功能能适合专业开发者和大型项目,但免费开源,启动速度快,适合各占用系统资源较多类项目和开发者Jupyter Notebook基于Web的交互式计算环境,可以创建包含代码、可视化和文本的文档支持实时代码执行和结果展示特别适合数据分析、教学演示和实验性代码开发第一个程序PythonHello World!在Python中创建第一个程序非常简单只需一行代码就可以输出Hello,World!printHello,World!这个简单的程序展示了Python的核心特点之一简洁明了相比其他编程语言,Python不需要复杂的语法结构即可完成基本功能运行这个程序后,控制台会显示文本Hello,World!print函数是Python中用于输出信息的基本函数,它接受一个或多个参数,并将它们打印到标准输出(通常是控制台)通过这个简单的例子,我们开始了解Python程序的基本结构和执行流程,为接下来学习更复杂的概念打下基础注释与编码规范注释类型Python支持两种注释方式单行注释使用#符号开头,之后的内容被解释器忽略;多行注释可以使用三引号(或)包围,形成多行字符串注释注释是提高代码可读性和维护性的重要手段编码规范PEP8PEP8是Python官方的代码风格指南,提供了编写Python代码的规范建议它涵盖了缩进(使用4个空格)、行长度(最大79个字符)、命名约定(如变量使用小写加下划线)等多个方面,遵循这些规范有助于提高代码质量Zen ofPython在Python交互式环境中输入import this可以看到Python之禅,这是一组指导Python编程的设计哲学其中包括简洁胜于复杂、可读性很重要等原则,这些理念深刻影响了Python语言的设计和使用基础语法缩进Python——标识符与保留字标识符命名规则保留字Python标识符是用来命名变量、函数、类等对象的名称Python标识保留字(关键字)是Python语言中有特殊含义的标识符,不能符必须以字母(包括下划线_)开头,后跟字母、数字或下划用作变量名或其他标识符名称可以通过以下代码查看所有关键线Python区分大小写,因此name和Name是两个不同的字标识符import keyword命名建议遵循以下约定变量和函数名使用小写字母,单词间用printkeyword.kwlist下划线连接(如student_name);类名使用驼峰命名法(如StudentInfo);常量全部大写(如MAX_VALUE)常见的关键字包括if、else、for、while、def、class、import、from、return等这些词构成了Python语言的基本语法结构,理解它们的用法是掌握Python编程的基础变量的概念与定义动态类型特性变量定义与赋值变量的本质Python是动态类型语言,这意味着变量的类Python中定义变量非常简单,不需要事先声型可以随时改变例如x=10(此时x是整在Python中,变量本质上是对对象的引用明变量类型只需使用赋值语句即可创建变数)、x=hello(现在x变成了字符串)当我们创建一个变量并赋值时,实际上是创量name=张
三、age=
25、is_student这种特性提供了极大的灵活性,但也要求开建了一个对象,并将变量名与这个对象关联=True可以同时为多个变量赋值x,y,z=发者对变量类型保持清晰的认识起来这种设计使Python的变量使用非常灵1,2,3活常用数据类型概览字符串布尔类型str bool用单引号、双引号或三引号括起来只有两个值True和False用于条的字符序列,如hello、world、件判断和逻辑运算在Python中,数字类型多行文本Python字符串是不所有对象都可以被解释为布尔值,可变的,一旦创建就不能修改如空字符串、
0、None等被视为类型None包括整数int、浮点数float和复False数complex整数如
10、-5;浮表示无或空的特殊类型,只有点数如
3.
14、-
0.001;复数如一个值None常用于初始化变量3+4jPython的整数精度不受限或表示函数没有返回值它不等同制,可以处理任意大的数字于
0、空字符串或False数字类型及操作运算符描述示例+加法5+2=7-减法5-2=3*乘法5*2=10/除法浮点结果5/2=
2.5//整除向下取整5//2=2%取余5%2=1**幂运算5**2=25Python支持整数int和浮点数float两种主要的数字类型整数可以是任意大小,而浮点数遵循IEEE754标准Python还提供了丰富的数学函数,如absx计算绝对值、roundx,n四舍五入到小数点后n位等进制转换是Python的强项,提供了多种内置函数bin将整数转换为二进制字符串、oct转换为八进制字符串、hex转换为十六进制字符串反向转换可以使用int函数并指定进制,如int1010,2将二进制字符串转换为整数字符串基础三引号字符串可包含多行文本,保留格式双引号字符串可包含单引号单引号字符串可包含双引号Python字符串是由Unicode字符组成的不可变序列创建字符串有三种方式单引号hello、双引号hello和三引号hello或hello三种方式功能相同,但有细微差别单引号中可以包含双引号而不需要转义,反之亦然;三引号可以跨多行,保留文本格式字符串拼接使用+运算符,如hello+world得到helloworld字符串重复使用*运算符,如hello*3得到hellohellohelloPython还支持丰富的转义字符,如\n换行、\t制表符、\\反斜杠、\单引号、\双引号等,用于表示特殊字符字符串常用方法长度计算查找与替换大小写转换使用len函数计算字符串的长find和index方法用于查找upper将字符串转换为大写;度(字符数量)例如子字符串的位置,如lower转换为小写;lenhello返回5这是处理hello.findl返回2;capitalize将首字母大写;字符串时最基本也是最常用的replace方法用于替换子字符title将每个单词的首字母大操作之一串,如hello.replacel,写例如hello.upper返L返回heLLo回HELLO分割与合并split方法将字符串按指定分隔符分割成列表;join方法将列表中的字符串合并成一个字符串例如-.join[a,b,c]返回a-b-c布尔类型与逻辑判断值True在Python中,非零数字、非空字符串、非空列表等都会被视为TrueTrue是布尔类型的一个值,在条件判断中表示条件成立值False数字
0、空字符串、空列表[]、None等会被视为FalseFalse是布尔类型的另一个值,在条件判断中表示条件不成立逻辑运算布尔值可以通过and与、or或、not非进行逻辑运算,生成新的布尔值例如True andFalse返回False;True orFalse返回True;not True返回False布尔类型是Python中表示真和假的数据类型,只有两个值True和False(注意首字母大写)布尔值通常用于条件判断,如if语句、while循环等Python中的比较运算符(如==、!=、、等)返回的也是布尔值Python的布尔运算支持短路求值在and运算中,如果第一个操作数为False,则不会计算第二个操作数;在or运算中,如果第一个操作数为True,则不会计算第二个操作数这种机制可以提高程序效率,同时也是编写简洁代码的有力工具数据类型转换Python提供了多种内置函数用于数据类型转换最常用的包括int将对象转换为整数,如int123返回整数123;float将对象转换为浮点数,如float
3.14返回浮点数
3.14;str将对象转换为字符串,如str123返回字符串123;bool将对象转换为布尔值,根据对象的真假性确定返回True或False当进行不同类型的数字运算时,Python会自动进行类型转换一般规则是如果操作数中有浮点数,结果就是浮点数;否则结果是整数例如3+
4.5会自动将整数3转换为浮点数进行计算,得到浮点数
7.5在类型转换过程中,可能会遇到错误,如intabc会引发ValueError,因为字符串abc无法转换为整数运算符基础算术运算符用于数学计算的基本运算符赋值运算符用于给变量赋值的运算符比较运算符用于对值进行比较的运算符逻辑运算符用于逻辑判断的运算符Python的算术运算符包括加+、减-、乘*、除/、整除//、取余%、幂**其中整除运算符返回的是不大于结果的最大整数,如7//2返回3;幂运算符用于计算乘方,如2**3返回8赋值运算符除了基本的=外,还有复合赋值运算符+=、-=、*=、/=等,用于简化操作例如x+=5相当于x=x+5运算符有优先级规则,通常幂运算优先级最高,其次是乘除,最后是加减可以使用括号改变计算顺序,提高代码的可读性比较运算符与结果运算符描述示例结果==等于5==5True!=不等于5!=6True大于53True小于58True=大于等于5=5True=小于等于5=4False比较运算符用于比较两个值之间的关系,结果总是返回布尔值True或False这些运算符可以应用于数字、字符串、列表等多种数据类型对于数字,比较基于数值大小;对于字符串,比较基于字典序(按字符的Unicode值比较)在Python中,可以使用链式比较表达式,如1x10,等价于1x andx10,但更简洁易读比较不同类型的对象时要小心,如比较数字和字符串可能会引发TypeError另外,is和is not运算符用于比较对象的身份(是否是同一个对象),而不是值的比较逻辑与成员运算符逻辑运算符成员运算符Python中的逻辑运算符包括and、or和not,用于组合多个条in和not in是Python的成员运算符,用于检查一个值是否存在于件逻辑与and只有当所有条件都为True时,结果才为序列(如字符串、列表、元组、集合、字典)中如果存在返回True;逻辑或or只要有一个条件为True,结果就为True;True,否则返回False对于字典,检查的是键而不是值逻辑非not取反,True变为False,False变为Truefruits=[apple,banana,cherry]x=5result=apple in fruits#Truey=10result=orange not in fruits#Trueresult=x0and y20#Trueresult=x10or y5#True message=Hello,world!result=not x==5#False result=Hello inmessage#True成员运算符在处理大型集合时非常有用,可以快速判断一个元素是否存在,而不需要遍历整个集合输入与输出函数获取用户输入类型转换使用input函数从用户获取数据将输入转换为合适的数据类型输出结果处理数据使用print函数展示处理结果对数据进行计算或操作input函数用于接收用户输入,返回的总是字符串类型如果需要数值类型,需要进行显式转换,例如age=intinput请输入年龄input函数接受一个可选参数作为提示信息,显示给用户当程序执行到input时,程序会暂停,等待用户输入并按回车键print函数用于向标准输出(通常是屏幕)打印内容它可以接受多个参数,用逗号分隔,默认以空格连接可以通过sep参数修改分隔符,通过end参数修改结尾符(默认是换行符\n)例如print姓名,年龄,sep=:,end=!\n会输出姓名:年龄!并换行print还支持格式化输出,可以使用%运算符、format方法或f-字符串(Python
3.6+)基本条件语句语句if条件判断if条件表达式:代码块1elif条件表达式:代码块2else:代码块3条件求值Python会依次评估每个条件,执行第一个为True的分支,如果所有条件都为False,则执行else分支(如果存在)代码缩进Python使用缩进来标识代码块,通常是4个空格同一代码块的所有语句必须对齐if语句是Python中最基本的条件控制结构,用于根据条件执行不同的代码完整的if语句包含if、elif(可选,可以有多个)和else(可选)三部分if和elif后面必须跟条件表达式,条件表达式的结果会被解释为布尔值在实际编程中,可以灵活使用if语句最简单的形式是只有if部分;更复杂的情况可以有多个elif部分,用于处理多种可能的情况if语句可以嵌套,即在一个if语句内部再使用if语句,但要注意控制逻辑复杂度,保持代码可读性嵌套与多重判断简单条件单一if语句,处理基本判断多重条件使用if-elif-else处理多种情况嵌套条件在if语句内部再使用if语句复合条件使用逻辑运算符组合多个条件嵌套if语句是在一个if语句的代码块中再包含另一个if语句,用于处理更复杂的条件判断例如if条件1:if条件2:#条件1和条件2都为True时执行else:#条件1为True但条件2为False时执行else:#条件1为False时执行多重判断可以使用if-elif-else结构或使用逻辑运算符and、or、not组合多个条件使用逻辑运算符通常可以让代码更简洁,但要注意运算符的优先级和结合性在复杂的条件判断中,建议使用括号明确表达意图,提高代码可读性嵌套层次过多会降低代码可读性,应尽量避免过深的嵌套,可以考虑提前返回或使用逻辑运算符组合条件循环结构循环for列表迭代范围迭代高级用法for循环最常见的用法是遍历列表、元组或range函数用于生成一个整数序列,常与enumerate函数可以同时获取索引和字符串等可迭代对象的元素例如for for循环配合使用rangen生成0到n-1的值for index,value initemin fruits:遍历水果列表;for charin序列;rangestart,stop生成start到enumeratelistzip函数可以同时遍历hello:遍历字符串中的每个字符stop-1的序列;rangestart,stop,step多个序列for x,y inziplist1,list2这可以指定步长些技巧可以使for循环更加灵活高效循环结构while条件检查while循环在每次迭代前检查条件如果条件为True,则执行循环体;如果条件为False,则跳出循环条件必须在某个时刻变为False,否则会形成无限循环循环体执行条件为True时,执行循环体中的代码通常,循环体中会包含修改条件的语句,使得条件最终会变为False,循环可以结束条件更新循环体执行完毕后,再次检查条件这个过程会一直重复,直到条件变为False如果没有适当更新条件,可能会导致死循环循环控制break语句可以立即跳出整个循环,无论条件是否为True;continue语句可以跳过当前迭代,直接进入下一次循环这些关键字提供了更灵活的循环控制方式综合练习猜数字游戏游戏规则import random猜数字游戏是一个简单而有趣的Python程序,它随机生成一个1到100之间的整数,然后让玩家猜这个数字每次猜测#生成1-100之间的随机数后,程序会给出提示猜测的数字是太大、太小还是正确玩家可以根据提示不断调整猜测,直到猜中为止secret=random.randint1,100这个游戏看似简单,但它结合了多个Python基础知识点随机数生成、变量、输入输出、类型转换、条件判断、循环结print我想了一个1到100之间的数字,你能猜出来吗?构等,是初学者练习编程的绝佳案例guess=0tries=0#循环直到猜中数字while guess!=secret:#获取玩家输入guess_str=input请输入你的猜测:#尝试将输入转换为整数try:guess=intguess_strexcept ValueError:print请输入有效的数字!continuetries+=1#判断猜测结果if guesssecret:print太小了!再试一次elif guesssecret:print太大了!再试一次printf恭喜你!猜中了数字{secret},用了{tries}次列表()基本用法list创建列表访问元素修改列表可以使用方括号[]创建空列表或包含使用索引访问列表元素,索引从0开列表是可变的,可以通过索引直接修初始元素的列表empty_list=[]、始numbers
[0]返回第一个元素改元素numbers
[0]=10可以使numbers=[1,2,3,4,5]、mixed=负索引从列表末尾开始计数用append添加元素到末尾,[1,hello,True,
3.14]列表可以包numbers[-1]返回最后一个元素切insert在指定位置插入元素,含任意类型的元素,甚至可以包含其片可以获取列表的一部分remove删除指定值的元素,pop他列表(嵌套列表)numbers[1:4]返回索引1到3的元素删除并返回指定索引的元素(默认为(不包括4)最后一个)列表常用方法方法描述示例append在列表末尾添加一个元素fruits.appendorangeextend将另一个列表的元素添加到列表末尾fruits.extend[grape,kiwi]insert在指定位置插入元素fruits.insert1,bananaremove删除指定值的第一个匹配项fruits.removeapplepop删除并返回指定索引的元素last_fruit=fruits.popsort对列表进行排序numbers.sortreverse反转列表元素的顺序fruits.reverse列表是Python中最常用的数据结构之一,掌握其常用方法可以大大提高编程效率sort方法可对列表进行原地排序,默认是升序;如果要降序排序,可以使用reverse=True参数count方法可以计算指定元素在列表中出现的次数index方法返回指定元素在列表中第一次出现的索引列表的复制需要特别注意,简单的赋值只是创建了对同一列表的引用,而不是复制列表要创建列表的副本,可以使用切片[:]浅拷贝或copy模块中的deepcopy函数深拷贝此外,列表推导式是一种创建新列表的简洁方法,如[x*2for xin range5]创建[0,2,4,6,8]元组()tuple元组的基本特性元组操作与解包元组是Python中的一种不可变序列类型,与列表类似,但一旦元组支持与列表类似的索引和切片操作coordinates
[0]、创建就不能修改元组使用圆括号创建empty_tuple=、coordinates[-1]、coordinates[1:3]但不支持修改元素的操single_item=1,(注意单元素元组需要逗号)、numbers=作,如append、remove等元组的常见方法包括count1,2,3,4,5元组也可以不使用括号创建coordinates=10,(计算元素出现次数)和index(查找元素索引)20元组解包是Python的一个强大特性,可以将元组的元素同时赋元组的不可变性使其成为保存不应更改的数据的理想选择,如坐值给多个变量x,y=coordinates将10,20解包为x=10,标点、RGB颜色值等元组也可以作为字典的键,而列表不行y=20这在函数返回多个值时特别有用,函数可以返回一个元虽然元组本身不可变,但如果元组包含可变对象(如列表),那组,调用者可以直接解包获取各个返回值name,age,gender么这些对象的内容仍然可以修改=get_person_info字典()基础知识dict键值结构访问与修改增删操作字典是Python中的映射类通过键访问和修改字典中的添加新键值对型,由键值对组成键必须值person[name]返回person[gender]=男是不可变类型(如字符串、张
三、person[age]=31删除键值对del数字、元组),而值可以是更新年龄如果访问不存在person[age]或使用pop任意类型字典使用花括号的键,会引发KeyError使方法,pop会返回删除的{}创建empty_dict={}、用get方法可以避免这个错值clear方法可以清空整person={name:张三,误person.getheight,个字典判断键是否存在可age:30}175,如果键不存在,返回以使用in操作符if name默认值(此处为175)in person:遍历字典可以遍历字典的键、值或键值对for keyin person:(遍历键)、for value inperson.values:(遍历值)、for key,value inperson.items:(遍历键值对)字典是无序的,但从Python
3.7开始,字典会保持插入顺序字典常用内置方法集合()数据结构set集合特性集合操作集合是Python中的一种无序、不重复元素的添加元素add方法添加单个元素,集合,类似于数学中的集合概念集合使用update方法添加多个元素删除元素花括号{}或set函数创建empty_set=remove方法(如果元素不存在会引发set(不能用{}创建空集合,因为这表示空KeyError)或discard方法(如果元素不存字典)、fruits={apple,banana,在不会引发错误)cherry}集合支持数学中的集合运算并集(|或集合的主要特点是元素不重复,如果添加union)、交集(或intersection)、差重复元素,集合会自动去重;元素必须是不集(-或difference)、对称差集(^或可变类型(如字符串、数字、元组);集合symmetric_difference)这些操作可以是无序的,不能通过索引访问元素高效地处理元素的重复、比较和过滤应用场景集合最常用的场景是去除列表中的重复元素unique_list=listsetoriginal_list集合也可以用于成员检测(使用in操作符),对于大数据集来说,检测速度比列表快得多在数据处理中,集合常用于查找共同元素或差异元素例如,找出两个列表的共同元素common=setlist1setlist2;找出只在list1中存在的元素unique_to_list1=setlist1-setlist2数据结构小练习现在,让我们通过一个综合练习来巩固对Python数据结构的理解假设我们有一个学生成绩数据集,需要进行处理和分析我们将使用列表、元组、字典和集合来完成不同的任务使用列表存储所有学生的姓名;使用元组存储每个学生的科目和成绩;使用字典建立学生姓名到成绩的映射;使用集合找出通过考试的学生这个练习将帮助你理解不同数据结构的特点和适用场景例如,列表适合存储有序数据并随时修改;元组适合存储不变的数据,如某次考试的固定成绩;字典适合通过键快速查找数据,如根据学生姓名查询成绩;集合适合去重和集合运算,如找出所有通过考试的学生通过这种实际应用,你可以更好地理解和掌握Python的数据结构函数的定义与调用函数定义使用def关键字定义函数,后跟函数名和括号,括号中可以包含参数列表函数体是缩进的代码块,可以使用return语句返回值(如果没有return,函数默认返回None)def greetname:打招呼函数return f你好,{name}!函数调用使用函数名和括号调用函数,括号中传入参数函数调用可以作为表达式的一部分,如赋值语句中可以将函数调用的结果赋值给变量message=greet张三printmessage#输出你好,张三!参数传递函数定义中的参数称为形参,调用时传入的参数称为实参Python中的参数传递是通过引用传递的,这意味着对可变对象的修改在函数内外都可见def add_itemlst,item:lst.appenditemreturn lstmy_list=[1,2,3]add_itemmy_list,4#my_list现在是[1,2,3,4]函数参数与默认值位置参数关键字参数按照函数定义中参数的顺序传递的参数调用通过参数名显式指定的参数使用关键字参数函数时,必须提供所有必需的位置参数,顺序可以不按顺序传递参数,但不能在位置参数之必须匹配函数定义后使用位置参数不定长参数默认参数使用*args接收任意数量的位置参数,以元组在函数定义时指定默认值的参数如果调用函形式存储;使用**kwargs接收任意数量的关键数时不提供这些参数,将使用默认值有默认字参数,以字典形式存储值的参数必须放在没有默认值的参数之后函数参数是Python中灵活而强大的特性位置参数是最基本的形式,如def adda,b:中的a和b关键字参数允许通过名称指定参数,如addb=5,a=3,这使得代码更具可读性,尤其是当函数有多个参数时默认参数值在函数定义时指定,如def greetname,greeting=你好:,这样如果不提供greeting参数,将使用你好作为默认值使用*args和**kwargs可以定义接受任意数量参数的函数,如def func*args,**kwargs:,这在不确定需要多少参数或编写包装函数时特别有用局部变量与全局变量局部变量全局变量关键字global在函数内部定义的变量称为局部变量,只在函数外部定义的变量称为全局变量,可global关键字用于在函数内部声明变量为在函数内部可见,函数执行完毕后销毁以在程序的任何地方访问在函数内部可全局变量,例如global x使用global如果函数内部的变量与全局变量同名,那以读取全局变量的值,但如果尝试修改全后,函数内对该变量的所有操作都是对全么在函数内部会优先使用局部变量,不会局变量,需要使用global关键字声明,否局变量的操作这种机制使函数能够修改影响全局变量则会创建一个同名的局部变量全局状态,但应谨慎使用,以避免代码难以维护递归函数简介函数调用自身递归函数直接或间接调用自己基本情况处理必须有终止条件以避免无限递归问题分解将原问题分解为更小的子问题递归是一种函数调用自身的编程技术,常用于解决可以分解为相似子问题的问题递归函数必须包含至少一个基本情况base case和至少一个递归情况recursive case基本情况是不再调用自身的情况,用于终止递归;递归情况是调用自身的情况,通常处理更小的子问题典型的递归示例是计算阶乘n!=n*n-1!,其中0!=1是基本情况def factorialn:if n==0:#基本情况return1else:#递归情况return n*factorialn-1递归的优点是代码简洁、直观,特别适合解决有递归定义的问题,如树结构遍历、排列组合等缺点是可能导致栈溢出(如果递归深度过大)和效率问题(可能有重复计算)在Python中,递归深度受到限制,默认为1000,可以通过sys.setrecursionlimit修改,但需谨慎使用匿名函数与表达式lambda表达式基础实用场景lambdalambda表达式是一种创建小型匿名函数的方式,使用lambda关键字,后跟参数列表、冒号和lambda表达式最常用于需要函数对象作为参数的情况,如排序函数sorted的key参数表达式lambda表达式只能包含一个表达式,不能包含语句或多行代码它的基本语法是students=[张三,85,李四,92,王五,78]sorted_students=sortedstudents,key=lambda x:x
[1]lambda参数1,参数2,...:表达式#按成绩排序:[王五,78,张三,85,李四,92]例如,定义一个计算两数之和的lambda函数与高阶函数结合使用也是常见用法add=lambda x,y:x+y map将函数应用于可迭代对象的每个元素printadd3,5#输出:8listmaplambda x:x*2,[1,2,3,4]#[2,4,6,8]lambda表达式创建的函数对象与def创建的函数对象本质上相同,只是没有名字(匿名)且只filter过滤出满足条件的元素能包含一个表达式listfilterlambda x:x5,[3,6,2,8,1]#[6,8]reduce累积应用函数(需要from functoolsimport reduce)from functoolsimport reducereducelambdax,y:x+y,[1,2,3,4,5]#151+2+3+4+5模块与包的基础模块概念导入语法模块是包含Python定义和语句的使用import语句导入模块文件,以.py为扩展名模块可以import math使用from...import包含函数、类、变量等,通过导入导入模块中的特定对象from可以在其他Python脚本中使用math importsin,cos使用as关模块的作用是组织相关代码,提高键字为模块或导入的对象指定别代码的可维护性和重用性名import numpyas np如果同时需要多个模块,可以在一行导入import os,sys包的概念包是一种特殊的模块,它包含多个模块,以目录形式组织包必须包含一个名为__init__.py的文件(在Python
3.3+中可以省略,但保留它是一个好习惯)包的作用是进一步组织模块,形成层次结构,如importpackage.subpackage.module常用内置模块Python的标准库包含许多内置模块,为开发者提供了丰富的功能math模块提供数学函数和常量,如math.sin,math.cos,math.pi等,适用于科学计算和数学运算random模块用于生成随机数和进行随机操作,如random.randinta,b生成a到b之间的随机整数,random.choiceseq从序列中随机选择一个元素,random.shufflelst随机打乱列表datetime模块处理日期和时间,提供了datetime、date、time等类,可以进行日期时间计算、格式化和解析os模块提供与操作系统交互的功能,如文件和目录操作(os.path.join,os.listdir),环境变量访问(os.environ),进程管理等sys模块提供了访问Python解释器的一些变量和函数,如命令行参数(sys.argv)、Python版本信息(sys.version)等这些模块共同构成了Python强大的标准库生态系统自定义模块与包创建模块创建一个.py文件,其中包含函数、类或变量定义文件名(不包括.py扩展名)将成为模块名例如,创建一个名为my_math.py的文件,包含自定义数学函数,这将创建一个名为my_math的模块创建包创建一个目录,其中包含一个__init__.py文件(可以为空)和其他模块文件目录名将成为包名例如,创建一个名为my_package的目录,其中包含__init__.py和一些模块文件,这将创建一个名为my_package的包配置__init__.py__init__.py文件可以为空,也可以包含代码,它会在导入包时自动执行通常用于初始化包、定义__all__变量(控制from packageimport*行为)或直接导入子模块,使它们可以通过包直接访问导入自定义模块包/使用import语句导入自定义模块或包,方式与导入内置模块相同Python会从sys.path列表中的目录查找模块和包如果模块不在这些目录中,可以将其添加到sys.path与第三方库安装pip简介基本命令常用第三方库pippip是Python的包管理工具,用于安装和管理第三安装包pip installpackage_name(安装最新版requests用于发送HTTP请求,比内置的urllib更方库它是Python官方推荐的包管理器,随本)或pip installpackage_name==
1.
0.0(安装简单易用Python
3.4+版本自动安装pip从Python包索引指定版本)numpy用于科学计算的基础库,提供高性能的(PyPI)中下载包,PyPI是Python社区维护的包卸载包pip uninstallpackage_name数组和矩阵运算存储库,包含了成千上万的Python库升级包pip install--upgrade package_name或pandas用于数据分析和操作,提供DataFramepip install-U package_name等数据结构列出已安装的包pip list或pip freezematplotlib用于数据可视化,创建各种静态、动态和交互式图表搜索包pip searchkeyword(注意此功能可能受到限制)Pillow图像处理库,支持打开、操作和保存多种格式的图像文件操作基础打开文件使用open函数打开文件,返回一个文件对象函数的第一个参数是文件路径,第二个参数是模式(如r读取,w写入,a追加)读取文件使用read方法读取整个文件内容,readline读取一行,readlines读取所有行并返回列表还可以直接遍历文件对象读取每一行写入文件使用write方法写入字符串,writelines写入字符串列表(不会自动添加换行符)在写入模式w下打开文件会清空文件内容关闭文件使用close方法关闭文件,释放系统资源最好在try-finally块中使用,或使用with语句自动关闭文件文件读写方法文件类型与模式语句与文件遍历with文本文件和二进制文件是两种基本的文件类型文本文件以字符为单位,使用with语句(上下文管理器)是处理文件的推荐方式,它能确保文件被常用于存储可读文本;二进制文件以字节为单位,用于存储图像、音频等正确关闭,即使发生异常也是如此二进制数据打开文件时需要指定相应的模式with openfile.txt,r asf:•文本模式r(读取)、w(写入)、a(追加)、r+(读写)content=f.read•二进制模式在文本模式后加b,如rb、wb、ab、r+b例如,打开二进制文件用于读取openimage.jpg,rb遍历文件内容有多种方法,最常用的是直接遍历文件对象,逐行读取with openfile.txt,r asf:for linein f:printline.strip#strip移除行尾的换行符处理大文件时,逐行读取比一次性读取整个文件更有效率,因为它减少了内存使用如果需要随机访问文件内容,可以使用seek方法移动文件指针,tell方法获取当前位置异常处理基础基本结构try...except捕获并处理可能发生的异常多异常处理处理不同类型的异常情况子句finally确保资源释放和清理操作的执行子句else无异常发生时执行的代码块异常处理是Python错误管理的核心机制,它允许程序在出现错误时优雅地处理而不崩溃try...except语句用于捕获和处理异常try块包含可能引发异常的代码;except块包含处理异常的代码可以指定要捕获的异常类型,或使用通用except捕获所有异常(不推荐)完整的异常处理结构包括try、except、else、finally四个部分try块中的代码可能引发异常;except块处理特定类型的异常;else块在try块没有引发异常时执行;finally块无论是否发生异常都会执行,通常用于资源清理多个except块可以处理不同类型的异常,更具体的异常应该放在前面例如try:result=10/0#引发ZeroDivisionErrorexcept ZeroDivisionError:print除数不能为零except Exceptionas e:printf发生其他异常:{e}else:print计算成功#无异常时执行finally:print无论如何都会执行#总是执行常见异常与调试异常类型描述示例SyntaxError语法错误print Hello#Python3需要括号NameError使用未定义的变量printx#x未定义TypeError类型错误,操作或函数应用于不适当类型2+2#字符串不能与整数相加的对象ValueError值错误,操作或函数接收到类型正确但值intabc#无法将abc转换为整数不合适的参数IndexError索引错误,序列中不存在该索引lst=[1,2,3];lst
[5]#索引5超出范围KeyError键错误,字典中不存在该键d={a:1};d[b]#键b不存在FileNotFoundError文件未找到错误opennonexistent.txt#文件不存在Python提供了raise语句,用于主动抛出异常这在编写函数或库时特别有用,可以在检测到不正确的输入或状态时提前终止程序并提供有用的错误信息语法为raise ExceptionType错误信息例如def dividea,b:if b==0:raise ValueError除数不能为零return a/b调试Python程序的常用技术包括使用print函数输出变量值和程序状态;使用Python内置的调试器pdb(import pdb;pdb.set_trace);使用IDE的调试功能,如断点、单步执行、变量监视等;使用logging模块记录日志,比print更灵活;使用assert语句进行断言调试,检查条件是否满足对于复杂程序,采用结构化的异常处理和全面的日志记录是良好的实践综合案例学生信息管理1功能需求核心代码我们将开发一个简单的学生信息管理系统,具备以下功能添加学生信息(姓名、学号、成绩等);查询特定学生信息;修改学生信息;删除class StudentManager:学生信息;显示所有学生信息;保存和加载数据def__init__self:self.students={}#使用字典存储学生信息该系统将综合运用我们学过的多个知识点数据结构(列表、字典)、函数、文件操作、异常处理等通过实现这个案例,可以巩固基础知识,并学习如何将不同的知识点整合应用到一个完整的程序中def add_studentself,id,name,age,score:if idin self.students:raise ValueErrorf学号{id}已存在self.students[id]={name:name,age:age,score:score}def get_studentself,id:if idnot in self.students:raise ValueErrorf学号{id}不存在return self.students[id]def update_studentself,id,**kwargs:if idnot inself.students:raise ValueErrorf学号{id}不存在for key,valueinkwargs.items:if keyinself.students[id]:self.students[id][key]=valuedef delete_studentself,id:if idnotinself.students:raise ValueErrorf学号{id}不存在del self.students[id]def show_all_studentsself:return self.studentsdef save_to_fileself,filename:with openfilename,w asf:for id,info inself.students.items:f.writef{id},{info[name]},{info[age]},{info[score]}\ndef load_from_fileself,filename:self.students.cleartry:with openfilename,r asf:for lineinf:id,name,age,score=line.strip.split,self.add_studentid,name,intage,floatscoreexcept FileNotFoundError:printf文件{filename}不存在,将创建新文件综合案例简单网页爬虫2代码实现环境准备功能概述import requests首先需要安装必要的库pip installrequests beautifulsoup4requests库用于发送HTTP请from bs4import BeautifulSoup我们将开发一个简单的网页爬虫,用于获取网页内容并提取特定信息该爬虫将使用requests求并获取响应,BeautifulSoup库用于解析HTML内容,提供了方便的导航、搜索和修改解析树库发送HTTP请求,使用BeautifulSoup库解析HTML内容,提取网页标题、链接等信息这个的功能在使用爬虫前,需要了解目标网站的robots.txt文件,遵守爬虫礼仪,避免频繁请求导def get_web_contenturl:案例将演示如何使用Python进行网络数据采集,这是Python在数据分析和自动化领域的重要致网站负担过重获取网页内容应用headers={User-Agent:Mozilla/
5.0Windows NT
10.0;Win64;x64AppleWebKit/
537.36}try:response=requests.geturl,headers=headersresponse.raise_for_status#检查请求是否成功return response.textexcept requests.exceptions.RequestException ase:printf请求出错:{e}return Nonedefextract_title_and_linkshtml:提取网页标题和链接if nothtml:return None,[]soup=BeautifulSouphtml,html.parsertitle=soup.title.string ifsoup.title else无标题links=[]for linkin soup.find_alla,href=True:href=link[href]text=link.text.stripif href.startswithhttp:links.appendtext,hrefreturn title,linksdef main:url=input请输入要爬取的网页URL:html=get_web_contenturlif html:title,links=extract_title_and_linkshtmlprintf网页标题:{title}printf发现{lenlinks}个链接:for i,text,href inenumeratelinks,1:printf{i}.{text}:{href}if__name__==__main__:main课程内容回顾函数编程数据结构学习了函数的定义、调用、参数类模块与包型和返回值掌握了作用域规则、探讨了Python的核心数据结构递归函数和匿名函数,能够编写模了解了模块和包的概念、导入方式列表、元组、字典和集合了解了块化、可重用的代码,提高开发效和使用方法学习了如何使用标准基础它们的特性、操作方法和适用场率库和第三方库,以及如何创建自己Python景,能够根据需求选择合适的数据的模块和包,扩展Python的功结构来存储和处理数据能我们学习了Python的安装配置、文件与异常基本语法、数据类型和运算符掌握了变量、条件语句和循环结构,掌握了文件的读写操作和异常处理为编程打下了坚实基础这些基础机制能够有效地管理资源,并编知识是进阶学习的必要条件写健壮的程序来处理各种可能的错误情况学习建议与拓展方向推荐学习资源编程实践高级方向《Python编程从入门到实编程能力主要通过实践获得根据兴趣和职业规划,可以向践》是初学者的理想教材,内建议从简单项目开始,逐步挑多个方向深入数据分析容全面且易于理解Python战更复杂的任务参与开源项Pandas,NumPy、Web开发官方文档docs.python.org目或编程挑战平台如Django,Flask、机器学习是最权威的参考资料在线学LeetCode可以提升解决问题TensorFlow,PyTorch、自习平台如Coursera、edX和实的能力建立个人项目组合,动化测试或DevOps保持对用教程网站如Real Python也记录学习过程和成果新技术的关注,参与社区讨提供优质的学习内容论,与其他开发者交流经验学习编程是一个持续的过程,需要耐心和毅力建立良好的学习习惯,如定期编码、解决实际问题、阅读优质代码等,对于长期进步至关重要不要害怕犯错,从错误中学习是成长的关键部分除了技术知识,还应培养软技能,如解决问题的思维方式、有效的时间管理和沟通能力这些能力对于实际工作环境同样重要最后,记住编程是一门实践性强的技能,最好的学习方式是动手实践和解决真实世界的问题祝你在Python学习之旅中取得成功!。
个人认证
优秀文档
获得点赞 0