还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程基础课程导学Python欢迎开始Python编程基础课程!本课程专为零基础学习者设计,帮助你从入门到熟练掌握Python编程语言的核心概念和实践技能我们将循序渐进地介绍Python环境配置、基础语法、数据类型、流程控制、函数编程、文件操作等内容,并通过丰富的案例巩固学习成果Python作为当今最流行的编程语言之一,广泛应用于网站开发、数据分析、人工智能、自动化脚本等众多领域掌握Python将为你打开编程世界的大门,创造无限可能!语言简介Python发展历史Python由荷兰程序员Guido vanRossum于1989年圣诞节期间创建,1991年首次发布Python
2.0于2000年发布,Python
3.0于2008年发布,标志着重大变革开源跨平台Python是一种开源编程语言,遵循GPL兼容的Python许可证它能在Windows、macOS、Linux等几乎所有主流操作系统上运行,具有极高的兼容性流行原因Python语法简洁优雅,易于学习;拥有丰富的标准库和第三方库;应用领域广泛,从Web开发到数据科学、人工智能;社区活跃,资源丰富,使其成为最受欢迎的编程语言之一安装与配置环境Python官网下载与安装Python访问python.org官方网站,下载适合您操作系统的最新版Python安装包Windows用户注意勾选Add Pythonto PATH选项,便于在命令行中直接使用Python包管理工具介绍pippip是Python的包管理工具,用于安装和管理第三方库安装Python时通常会自动安装pip可通过命令行输入pip--version验证是否安装成功集成开发环境()IDEPyCharm是专业的Python IDE,提供代码补全、调试工具等功能VS Code配合Python插件也是不错的选择初学者也可以使用IDLE(Python自带)或在线平台如Jupyter Notebook开始学习第一个程序Python HelloWorld!编辑与运行演示函数使用print打开Python IDLE或您选择的编辑print是Python中最基础的输出器,创建新文件并保存为函数,可以显示文本、数字或变量hello.py输入代码内容可以一次输出多个内容,用printHello,World!然后运逗号分隔,如printHello,行程序,您将在控制台看到输出的Python,2023问候语常见错误初学者常见错误包括忘记引号导致语法错误;引号不匹配;大小写错误;中英文标点混用Python是区分大小写的语言,对缩进和标点符号要求严格基础语法规则Python缩进的意义Python使用缩进来表示代码块,而不是花括号标准缩进是4个空格错误的缩进会导致语法错误或程序逻辑错误缩进在条件语句、循环和函数定义中尤为重要注释书写方法单行注释使用#符号,如#这是一条注释多行注释可以使用三引号注释内容良好的注释习惯能让代码更易读懂、维护和协作代码风格Python PEP8PEP8是Python的官方代码规范,包含命名规则、缩进、行长度等建议遵循PEP8可以使代码更规范、易读许多团队将其作为标准编码规范,有助于提高代码质量变量与命名规则变量赋值命名建议Python中变量无需声明类变量名只能包含字母、数字和型,直接赋值即可使用如下划线,且不能以数字开头name=张三Python变量应当使用有意义的名称,小写是引用,赋值操作实际创建了字母加下划线是常用风格(如对象引用变量可以随时更改student_name)常量通类型,如x=5后可以改为x=常用全大写(如hello MAX_VALUE=100)常见语法错误常见错误包括使用关键字作变量名(如class=5);使用中文引号或空格;命名规则错误(如2nd_name);拼写错误导致引用不存在的变量注意Python中大小写敏感,Age和age是不同变量标准数据类型概览字符串类型字符串str是Unicode字符序列,用单引号或双引号表示,如hello或世界三引数字类型号可表示多行字符串字符串支持索引、切片和丰富的方法操作Python包含整数int、浮点数float和复数complex整数如
10、-5;布尔类型浮点数如
3.
14、-
0.001;复数表示为3+4j数字类型可直接进行数学运布尔bool类型只有True和False两个值,算用于逻辑判断布尔值可通过比较运算得到,也可由其他类型转换而来在Python中,空值、
0、空字符串都会被视为False数字与基本运算概念基本运算int/float整数int在Python3中没有大小限制,可表示任意大的数浮Python支持常见的算术运算符点数float遵循IEEE754标准,精确到15-17位小数注意浮点•加法3+2=5数计算可能存在微小误差,如
0.1+
0.2≠
0.3•减法3-2=1使用type函数可以查看变量的类型•乘法3*2=6a=10•除法3/2=
1.5(始终返回浮点数)printtypea#输出:•整除3//2=1(向下取整)•取余3%2=1•幂运算3**2=9字符串基础操作字符串定义及拼接字符串可用单引号、双引号或三引号定义拼接可用+运算符,如Hello+World=HelloWorld使用*可重复字符串,如a*3=aaa字符串索引与切片字符串支持索引访问(从0开始),如Python
[0]=P负索引表示从末尾计算,如Python[-1]=n切片语法为[起始:结束:步长],如Python[1:4]=yth常用字符串方法字符串有丰富的内置方法upper转大写,lower转小写,strip去除空白,replace替换内容,split分割字符串,len获取长度,find查找子串位置等布尔值和比较运算运算符含义示例结果==等于5==5True!=不等于5!=6True大于53True小于53False=大于等于5=5True=小于等于5=4False布尔类型bool在Python中有两个值True和False(注意大小写)布尔值通常用于条件判断和循环控制任何对象都可以通过bool函数转换为布尔值,空对象(如
0、None、空字符串、空列表[])会被转换为False,其他一般为True逻辑运算符包括and(与)、or(或)、not(非),用于组合多个条件如age18and score=60同时满足两个条件才为True列表简介list定义与基本用法增删改查操作列表嵌套列表是Python中最常用的数据结构之一,用方括添加元素append在末尾添加元素,insert在列表可以嵌套,形成多维数据结构例如,matrix号[]表示,如numbers=[1,2,3]列表可包含不指定位置插入元素,extend合并列表=[[1,2,3],[4,5,6],[7,8,9]]表示一个3×3矩阵同类型元素,如mixed=[1,hello,True,
3.14]访问嵌套元素使用多级索引,如matrix
[0]
[1]返回删除元素remove删除指定元素,pop弹出指使用len可获取列表长度,使用索引可访问元值2嵌套列表常用于表示表格数据、矩阵或复杂定位置元素(默认最后一个),clear清空列表素,如numbers
[0]获取第一个元素数据结构修改元素直接通过索引赋值,如list
[0]=newvalue查找元素in关键字检查元素是否存在,index返回元素位置元组与不可变类型tuple元组定义方法与列表的区别应用场景元组使用圆括号定义,如coordinates元组最大的特点是不可变元组适合存储不应被修改的数据,如坐=10,20创建单元素元组需要加逗immutable,创建后不能修改、添加标点、RGB颜色值、日期时间等号,如single_tuple=1,,否则会被解或删除元素列表是可变的,可以自由函数返回多个值时自动打包为元组,如释为普通括号也可以省略括号,直接修改内容def get_info:return张三,25用逗号分隔,如tuple=1,2,3元组通常比列表效率更高,占用内存更元组作为不可变对象可以提高代码安全元组的访问方式与列表相同,使用索少元组可以作为字典的键,而列表不性,特别是在多线程环境中引,如coordinates
[0]返回10元组支能持切片操作,也可以使用len获取长元组作为字典键或集合元素时很有用,元组的不可变性提供了一定程度的数据度因为这些容器要求键是不可变对象保护,保证数据不被意外修改字典用法dict键值对概念字典是Python中的映射类型,通过键值对存储数据使用花括号{}定义,如person={name:张三,age:25}字典的键必须是不可变类型(如字符串、数字、元组),而值可以是任何类型通过键访问值,如person[name]或person.getnameget方法在键不存在时返回None,避免报错键是唯一的,重复键会覆盖原值新增/修改/删除元素添加或修改元素直接赋值,如person[email]=zhangsan@example.com删除元素del语句删除指定键值对,如del person[age];pop方法删除并返回值;clear清空字典字典方法keys返回所有键,values返回所有值,items返回所有键值对,update合并字典典型应用词频统计字典是实现词频统计的理想结构例如,统计文本中单词出现的频率
1.创建空字典word_count={}
2.遍历文本中的每个单词
3.若单词不在字典中,添加并设置频率为1;否则将频率加
14.最终字典将包含每个单词及其出现次数集合基础set集合操作交集ab或a.intersectionb,获取两个集合共有的元素去重特性并集a|b或a.unionb,获取两个集合的集合是无序且不重复元素的集合,使用花括号所有元素{}或set创建,如s={1,2,3}或s=set[1,差集a-b或a.differenceb,获取在a但2,2,3,3]集合会自动去除重复元素,是快不在b中的元素速去除列表重复项的有效工具对称差a^b或a.symmetric_differenceb,获取仅在一个集合中的元素集合应用场景集合常用方法集合最适合用于成员资格测试、消除重复项和add添加元素,remove删除指定元素元数学集合运算例如,判断用户是否在白名素不存在会报错,discard安全删除元素单、查找两个列表的共同元素、快速去重等场元素不存在不报错,pop随机移除一个元景素,clear清空集合,len获取元素个数数据类型转换转换函数说明示例结果int转换为整数int123123float转换为浮点数float
3.
143.14str转换为字符串str123123list转换为列表listabc[a,b,c]tuple转换为元组tuple[1,2,3]1,2,3set转换为集合set[1,2,2,3]{1,2,3}dict转换为字典dict[a,1,b,2]{a:1,b:2}Python的类型转换非常灵活,但需注意一些易错点int不能直接转换带小数点的字符串,需先转为float;转换失败会引发ValueError异常;bool值转整数时,True为1,False为0;空容器转换为布尔值时为False明确类型转换对开发规范而有效的代码至关重要,特别是在处理用户输入、文件数据或API返回数据时建议使用异常处理机制处理可能的转换错误运算符详解算术运算符赋值运算符•+加法,如5+3=8•=简单赋值,如x=5•-减法,如5-3=2•+=加法赋值,如x+=3等同于x=x+3•*乘法,如5*3=15•-=减法赋值,如x-=3等同于x=x-3•/除法(返回浮点数),如5/3=
1.
6666...•*=乘法赋值,如x*=3等同于x=x*3•//整除(向下取整),如5//3=1•/=除法赋值,如x/=3等同于x=x/3•%取余,如5%3=2•//=整除赋值,如x//=3等同于x=x//3•**幂运算,如5**3=125•%=取余赋值,如x%=3等同于x=x%3•**=幂赋值,如x**=3等同于x=x**3逻辑与成员运算符逻辑运算符•and逻辑与,如x0and x10,全真才为真•or逻辑或,如x0or x10,有真则为真•not逻辑非,如not x10,真变假,假变真成员运算符•in如3in[1,2,3]返回True•not in如3not in[1,2,3]返回False运算符优先级高优先级圆括号、索引[]、属性访问.、函数调用中优先级幂运算**、正负号+x/-x、乘除///%*@、加减+-低优先级比较运算==!===、成员测试in notin、逻辑运算not andorPython运算符优先级决定了表达式中运算的执行顺序优先级从高到低排列,相同优先级的运算符从左到右计算圆括号可以改变运算顺序,提高表达式的清晰度例如,3+4*2的结果是11,而3+4*2的结果是14建议在复杂表达式中使用括号明确运算顺序,即使在某些情况下可能是多余的,这有助于提高代码可读性并防止意外错误特别是在逻辑表达式中,括号可以明确表达意图输入与格式化输出input获取用户输入字符串格式化方法多行输出方法input函数从用户获取输入,返回值始f-string格式(Python
3.6+)f姓使用三引号定义多行字符串终是字符串类型可以提供提示信息,如名{name},年龄{age}message=这是第一行name=input请输入您的名字如format方法姓名{},年龄这是第二行需获取数值,需要进行类型转换,如age{}.formatname,age=intinput请输入年龄这是第三行%格式化姓名%s,年龄%d%使用\n换行符print第一行\n第二行\nname,age第三行f-string是最推荐的方式,简洁且可在字多次调用print print行1;print行符串中直接嵌入表达式,如f1+2={1+2;print行32}程序流程控制条件语句单分支if当条件满足时执行,否则跳过双分支if-else二选一,满足条件执行if块,否则执行else块多分支if-elif-else多条件判断,按顺序匹配,找到第一个满足的条件Python使用缩进表示代码块,通常为4个空格缩进不正确会导致语法错误或逻辑错误,这是Python代码中最常见的错误之一基本语法if条件1:执行语句1elif条件2:执行语句2else:执行语句3条件部分可以是任何返回布尔值的表达式Python会将非零数值、非空字符串、列表、字典等视为True,将
0、None、空串、空列表等视为False条件判断技巧多条件判断与嵌套三元运算符使用逻辑运算符连接多个条件Python提供简洁的三元条件表达式,格式为if age18and score=60:值1if条件else值2print成年且及格当条件为True时返回值1,否则返回值2例如条件语句可以嵌套使用result=及格if score=60else不及格if age18:等价于if score=60:print成年且及格if score=60:else:result=及格print成年但不及格else:else:result=不及格print未成年三元表达式适合简单条件判断,使代码更加简洁但过于复杂的逻辑嵌套时要特别注意缩进的正确性,过深的嵌套会降低代码可读性不建议使用三元表达式,可能导致可读性下降循环结构循环whilewhile语法结构break语句while循环基本语法break用于立即结束整个循环,跳转到循环后的语句继续执行例如while条件:循环体count=0while True:当条件为True时,循环体会反复执行;条件为Falseprintcount时,跳出循环例如count+=1count=0if count=5:while count5:breakprintcount此例使用无限循环while True,当count达到5时使用count+=1break跳出无限循环必须包含适当的break语句,否此例将打印0到4的数字while循环适合不确定循环则会导致程序永远运行次数的场景,如用户输入、文件读取等continue语句continue用于跳过当前循环的剩余部分,直接进入下一次循环例如count=0while count10:count+=1if count%2==0:continueprintcount此例只打印奇数,当count是偶数时,continue跳过打印语句continue适合需要跳过特定条件的情况,保持循环结构的完整性循环结构循环forfor循环遍历可迭代range函数的妙用遍历技巧对象range函数生成数字序enumerate同时获取索Python的for循环主要用于列,常用于控制循环次数引和元素遍历可迭代对象(如列表、rangestop生成0到for index,value in元组、字符串、字典、集合stop-1的整数enumerate[a,b,c]:等)基本语法rangestart,stop生成printindex,value#0for变量in可迭代对象:start到stop-1的整数a,1b,2c循环体rangestart,stop,zip同时遍历多个列表遍历列表for itemin[1,step按step步长生成整for name,age inzip[张2,3]:printitem数例如,for iin range0,10,三,李四],[25,30]:遍历字符串for charin2:printi打印0,2,4,6,8printname,age#张Python:printchar三25,李四30遍历字典键值for key,value indict.items:printkey,value嵌套循环与典型案例嵌套循环基本概念九九乘法表实现查找二维列表嵌套循环是指在一个循环体内再包含另一个经典的九九乘法表是嵌套循环的典型应用嵌套循环常用于处理二维数据,如搜索二维循环外层循环每执行一次,内层循环会完列表中的特定元素for iin range1,10:整执行一遍嵌套循环适用于处理多维数据for j in range1,i+1:matrix=[[1,2,3],[4,5,6],[7,8,9]]结构或需要按特定模式生成数据的场景printf{j}×{i}={i*j},end=\t target=5基本结构print#换行found=Falsefor iin外层可迭代对象:外层循环控制行数,内层循环控制每行的列for iin rangelenmatrix:for jin内层可迭代对象:数特点是内层循环的终止值依赖于外层循for jin rangelenmatrix[i]:处理语句环的变量iend=\t参数控制打印后不换if matrix[i][j]==target:行而是输出制表符printf找到目标值{target},位置嵌套循环的执行次数是各层循环次数的乘在{i},{j}积,如外层10次、内层5次,总执行次数为found=True50次breakif found:break列表解析式(推导式)基本语法列表解析式(又称列表推导式)是Python中创建列表的简洁方式,基本语法为[表达式for变量in可迭代对象if条件]其中if条件部分是可选的简单示例[x*2for x in range5]生成[0,2,4,6,8]带条件的示例[x for xin range10if x%2==0]生成[0,2,4,6,8]传统方式对比对比传统的for循环方式传统方式squares=[]for xin range10:squares.appendx**2列表解析式squares=[x**2forxin range10]列表解析式更简洁、执行效率更高,一行代码即可完成创建操作高效数据处理案例嵌套列表解析[[i*j forjinrange1,4]for iinrange1,4]生成[[1,2,3],[2,4,6],[3,6,9]]文本处理[word.upper forword intext.split iflenword3]将文本中长度大于3的单词转为大写矩阵转置[[row[i]for rowin matrix]for iin rangelenmatrix
[0]]将二维矩阵的行列互换其他推导式类型除列表解析式外,Python还支持字典推导式{key:value for变量in可迭代对象if条件}集合推导式{表达式for变量in可迭代对象if条件}生成器表达式表达式for变量in可迭代对象if条件函数定义与调用def语法结构参数与返回值函数是组织好的、可重复使用的代码块,用于执参数用于向函数传递信息,可以有多个参数,也行特定任务Python使用def关键字定义函数可以没有参数返回值通过return语句指定函数执行结果并传回def函数名参数1,参数2,...:给调用者函数可以返回单个值、多个值或不返函数体回值(默认返回None)return返回值示例函数名应当遵循变量命名规则,通常使用小写字def calculate_arealength,width:母和下划线函数定义不会执行函数体,只有在area=length*width调用函数时才会执行return area调用示例函数定义后通过函数名加括号调用,可以将函数调用结果赋值给变量#调用函数result=calculate_area5,3printresult#输出:15函数调用可以作为表达式的一部分total=calculate_area5,3+calculate_area2,4调用函数时需确保传入正确数量和类型的参数,否则会导致错误函数参数类型位置参数关键字参数位置参数是最常见的参数形式,调用时按位置顺序关键字参数在调用函数时显式指定参数名,可以不传递定义函数时列出的参数名称在函数体内可直按定义顺序传递这提高了代码可读性,特别是参接使用,调用函数时必须提供相应数量的参数数较多时调用:greetmessage=下午好,name=李四def greetname,message:#李四,下午好return f{name},{message}位置参数和关键字参数可以混用,但位置参数必须调用:greet张三,早上好#张三,早上好在关键字参数之前可变参数默认参数*args收集任意数量的位置参数到一个元组中默认参数为参数提供默认值,调用时可以省略这些参数定义函数时,默认参数必须放在非默认参数**kwargs收集任意数量的关键字参数到一个字之后典中def greetname,message=你好:def func*args,**kwargs:printargs#元组return f{name},{message}printkwargs#字典调用:greet王五#王五,你好调用:func1,2,name=张三,age=25注意默认参数的值在函数定义时计算一次,对于可变类型如列表可能导致意外行为输出:1,2{name:张三,age:25}变量作用域全局作用域Global模块级别定义的变量,整个程序可访问函数作用域Local函数内定义的变量,只在函数内可见嵌套作用域Enclosing嵌套函数中外层函数的变量对内层函数可见Python变量作用域遵循LEGB规则Local(局部)→Enclosing(嵌套)→Global(全局)→Built-in(内置)当访问变量时,Python会按此顺序查找变量名局部变量在函数内部定义,仅在函数内可用函数执行完毕后,局部变量会被销毁全局变量在函数外部定义,可在整个模块中访问当局部变量与全局变量同名时,函数内部默认使用局部变量global关键字用于在函数内部声明一个全局变量例如count=0def increment:global countcount+=1incrementprintcount#输出:1不使用global时,函数内部无法修改全局变量的值,而会创建同名的局部变量使用global后,函数内的操作将直接影响全局变量返回值的多种可能返回单值返回多值返回None的情况最常见的方式是返回单个值Python支持函数返回多个值,实际上是返回一如果函数没有return语句,或者return语句后个元组没有表达式,函数将返回None def squarex:return x*x defget_dimensions:def greetname:return100,50,30#隐式创建元组printf你好,{name}调用result=square5#结果为25#无return语句调用方式返回值可以是任何数据类型,如数字、字符或者def end_function:串、列表、字典等length,width,height=get_dimensionsreturn#空return#解包None表示空值或没有值,常用于表示操作已完或者dimensions=get_dimensions#成但没有特定结果,或表示操作失败使用dimensions是一个元组print函数时,返回值为None,因此不应将多值返回特别适合需要返回多个结果的场景,print的结果赋值给变量如同时返回计算结果和状态匿名函数lambdalambda基本语法配合map/filter应用lambda函数是一种小型匿名函数,只能包含一个表达式lambda函数的基lambda函数常与map、filter等高阶函数一起使用本语法为map对可迭代对象的每个元素应用函数lambda参数:表达式numbers=[1,2,3,4,5]例如squares=listmaplambda x:x**2,numbers#结果:[1,4,9,16,25]square=lambda x:x*xfilter筛选符合条件的元素调用square5#结果为25numbers=[1,2,3,4,5,6]lambda函数等价于evens=listfilterlambda x:x%2==0,numbers#结果:[2,4,6]defsquarex:return x*xsorted自定义排序lambda函数主要用于需要函数对象的场景,如作为参数传递给其他函数students=[张三,85,李四,92,王五,78]lambda函数没有名称,但可以赋值给变量sorted_students=sortedstudents,key=lambda x:x
[1],reverse=True#按成绩降序排列常用内置函数介绍Python提供了丰富的内置函数,无需导入即可使用这些函数包括数据处理len序列获取长度,sum可迭代对象求和,max/min求最大/最小值,sorted排序,reversed反转,round四舍五入类型转换int,float,str,list,tuple,dict,set等用于类型转换迭代工具enumerate可迭代对象返回索引-值对,zip并行迭代多个可迭代对象,map映射处理,filter筛选其他实用函数abs求绝对值,all/any检查全部/任一为真,input获取用户输入,open打开文件,range生成数字序列,help获取帮助信息模块与导入Python模块基本概念模块是包含Python定义和语句的文件,以.py为扩展名模块可以包含函数、类、变量等,用于组织相关代码,提高可维护性和复用性每个Python文件都可以作为一个模块被其他程序导入和使用导入语法导入整个模块import模块名导入模块中的特定成员from模块名import函数名,变量名导入所有成员(不推荐)from模块名import*使用别名import模块名as别名或from模块名import函数名as别名嵌套导入from包名.模块名import函数名自定义模块结构
1.创建mymodule.py文件,添加函数、变量等
2.在其他程序中使用import mymodule导入
3.通过mymodule.函数名调用函数模块文件一般包含函数定义、全局变量,以及在导入时需执行的初始化代码可以通过__name__变量判断模块是被导入还是直接运行常用标准库Python包含丰富的标准库,无需安装即可使用,如math数学函数datetime日期和时间处理os操作系统接口sys系统相关参数random随机数生成json JSON数据处理re正则表达式collections特殊容器数据类型与模块time datetime获取当前时间时间格式转换strftime睡眠与延迟time.sleeptime模块strftime方法将时间对象转换为指定格式的字符time.sleep函数使程序暂停执行指定的秒数串import timeimport timetimestamp=time.time#获取时间戳from datetimeimport datetimeprint开始printtimestamp#如
1624563487.123456now=datetime.now time.sleep2#暂停2秒formatted=now.strftime%Y-%m-%d print2秒后datetime模块%H:%M:%S常用场景from datetimeimport datetimeprintformatted#如2023-06-2514:30:45now=datetime.now#获取当前日期时间限制程序执行速度,如控制API请求频率常用格式代码printnow#如2023-06-25模拟定时执行的任务14:30:
45.123456%Y年份(如2023);%m月份(01-12);datetime提供更丰富的日期时间操作,如获取实现倒计时效果%d日(01-31)年、月、日、时、分、秒now.year,减轻系统负载,如在循环中添加短暂暂停now.month,now.day等%H小时(00-23);%M分钟(00-59);%S秒(00-59)注意sleep期间CPU不会执行当前线程的代码,但可能会执行其他线程或进程的代码strptime方法则将字符串解析为datetime对象dt=datetime.strptime2023-06-2514:30:45,%Y-%m-%d%H:%M:%S随机模块random随机数生成random模块提供多种生成随机数的函数import randomrandom.random返回[
0.0,
1.0之间的浮点数random.uniforma,b返回[a,b]之间的浮点数random.randinta,b返回[a,b]之间的整数random.randrangestart,stop,step返回rangestart,stop,step中的随机数打乱列表shufflerandom.shuffle函数用于随机打乱列表中元素的顺序import randomnumbers=[1,2,3,4,5]random.shufflenumbersprintnumbers#可能输出[3,1,5,2,4]该函数直接修改原列表,不返回新列表如果需要保留原列表,可以先复制一份随机抽样random.samplepopulation,k从序列中随机选择k个不重复的元素手机验证码生成案例使用random模块可以轻松生成随机验证码import randomdef generate_verification_codelength=6:生成指定长度的数字验证码code=for_in rangelength:code+=strrandom.randint0,9return code生成字母数字混合验证码defgenerate_mixed_codelength=6:chars=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZcode=for_in rangelength:code+=random.choicecharsreturn code与数学模块math cmath文件操作基础open读取/写入文件Python使用open函数打开文件,语法为openfile,modefile是文件路径,mode是打开模式r只读模式(默认)w写入模式(创建新文件或覆盖已有文件)a追加模式(在文件末尾添加内容)x创建模式(仅当文件不存在时创建)还可添加b表示二进制模式,t表示文本模式(默认)文件读取方式常用的文件读取方法file.read[size]读取指定字节数,省略size则读取全部file.readline读取一行file.readlines读取所有行并返回列表迭代文件对象for linein file:printline写入文件使用write方法file.writestringwith上下文管理器推荐使用with语句操作文件,可以自动处理文件的关闭with openfile.txt,r as f:content=f.read优点自动调用__enter__和__exit__方法即使发生异常也能确保文件正确关闭代码更简洁,不需要显式调用close文本文件操作案例读取文本文件并统计行数写入文本内容并保存以下是一个读取文本文件并统计行数、单词数和字符数的示例以下是一个简单的文本编辑器功能,可以写入和追加内容到文件def analyze_text_filefilename:def write_to_filefilename,content,mode=w:try:写入内容到文件with openfilename,r,encoding=utf-8as f:mode:w覆盖写入,a追加写入content=f.read lines=content.split\n try:words=content.split withopenfilename,mode,encoding=utf-8asf:chars=lencontent f.writecontentreturn{return Truelines:lenlines,except Exception as e:words:lenwords,printf写入文件时发生错误:{e}characters:chars return False}使用示例except FileNotFoundError:return文件不存在#创建新文件并写入内容except Exception as e:write_to_filenotes.txt,这是第一行\n这是第二行return f发生错误:{e}#追加内容到文件write_to_filenotes.txt,\n这是追加的第三行,a二进制与文件操作二进制模式图片文件处理处理二进制文件时,需要在打开模式中添加b复制图片文件的示例rb二进制只读模式def copy_imagesource,destination:try:wb二进制写入模式with opensource,rb assrc:ab二进制追加模式data=src.read在二进制模式下,读写的是字节而非字符串,返回的是with opendestination,wb asdest:bytes对象而非str对象dest.writedatareturn Trueexcept Exceptionas e:printf复制图片时发生错误:{e}returnFalse注意处理大文件时应分块读写,避免一次性读取整个文件耗尽内存音频文件处理处理音频文件的原理与图片类似,都是以二进制方式操作def extract_audio_headeraudio_file,header_size=44:提取WAV文件头信息try:with openaudio_file,rb asf:header=f.readheader_sizereturn headerexceptExceptionas e:printf读取音频文件时发生错误:{e}return None处理复杂的音频、视频文件通常需要使用专门的库,如librosa、PyDub(音频)或OpenCV(视频)异常处理机制try-except异常基本概念异常是程序执行过程中发生的错误Python使用try-except语句捕获和处理异常,避免程序因错误而终止常见的异常类型包括TypeError、ValueError、ZeroDivisionError、FileNotFoundError等基本异常捕获try-except基本语法try:#可能引发异常的代码except异常类型:#处理特定异常exceptExceptionase:#处理其他异常else:#无异常时执行finally:#无论是否发生异常都执行finally语句finally块无论是否发生异常都会执行,通常用于释放资源、关闭文件或数据库连接等清理操作例如try:f=openfile.txt,rcontent=f.readexcept FileNotFoundError:print文件不存在finally:f.close#确保文件被关闭注意使用with语句可以自动处理资源关闭,通常是更好的选择自定义异常创建自定义异常类通过继承Exception类来创建自定义异常使用raise抛出异常使用raise语句手动触发异常捕获与处理使用try-except机制捕获自定义异常创建自定义异常类的示例class InsufficientBalanceErrorException:当账户余额不足时抛出def__init__self,balance,amount:self.balance=balanceself.amount=amountself.deficit=amount-balancemessage=f余额不足当前余额{balance},需要{amount},差额{self.deficit}super.__init__message使用自定义异常的示例class BankAccount:def__init__self,balance=0:self.balance=balancedef withdrawself,amount:if amountself.balance:raise InsufficientBalanceErrorself.balance,amountself.balance-=amountreturn self.balance捕获处理示例account=BankAccount100try:account.withdraw150except InsufficientBalanceErrorase:printeprintf请存入至少{e.deficit}元后再尝试取款列表与字典的高级用法列表排序与反转字典合并与查找内置排序方法合并字典list.sort原地排序,改变原列表方法1(Python
3.5+)combined={**dict1,**dict2}示例numbers=[3,1,4,2]numbers.sort#numbers变为[1,2,3,4]方法2(Python
3.9+)numbers.sortreverse=True#降序排列[4,3,2,1]combined=dict1|dict2sorted函数返回新列表,原列表不变方法3combined=dict
1.copy示例numbers=[3,1,4,2]combined.updatedict2sorted_numbers=sortednumbers#[1,2,3,4]高效查找自定义排序dict.getkey,default安全获取值,键不存在返回默认值numbers.sortkey=lambda x:absx#按绝对值排序dict.setdefaultkey,default获取值,键不存在则设置默认值并返回列表反转字典推导式list.reverse原地反转{k:v fork,v inzipkeys,values}reversed返回反向迭代器defaultdict自动为不存在的键创建值from collectionsimport defaultdictcounts=defaultdictint#默认值为0字符串进阶处理方法说明示例结果replaceold,new[,count]替换子串hello.replacel,L heLLofindsub[,start[,end]]查找子串位置,未找到返回-1hello.findl2splitsep=None,maxsplit=-1分割字符串a,b,c.split,[a,b,c]joiniterable合并可迭代对象的元素,.join[a,b,c]a,b,cstrip[chars]移除首尾指定字符hello.strip hello字符串是Python中最常用的数据类型之一进阶处理技巧可以大大提高文本处理效率字符串替换replace方法可指定替换次数,如hello.replacel,L,1只替换第一个l,结果为heLlo查找方法比较find/rfind从左/右查找,返回索引或-1;index/rindex功能类似,但未找到时抛出ValueError异常;in操作符只判断是否包含,不关心位置多分隔符分割通过正则表达式可以使用多个分隔符,如re.splitr[,;\s]+,a,b;c d将输出[a,b,c,d]复杂字符串格式化f-string支持表达式,如f{name.upper};format支持位置和关键字,如{0},{1}.formata,b或{x},{y}.formatx=a,y=b正则表达式模块re2正则表达式基础匹配与搜索操作正则例子邮箱验证正则表达式是一种强大的字符串模式匹re模块提供多种函数验证电子邮箱格式的正则表达式配工具Python通过re模块提供正则表re.matchpattern,string从字符串import re达式支持基本语法包括开头匹配模式email_pattern=r^[a-zA-Z0-9_.+-字符类[abc]匹配a、b或c,[^abc]re.searchpattern,string在字符串]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-匹配除a、b、c外的任何字符中查找匹配模式的第一个位置.]+$预定义字符类\d匹配数字,\w匹配字re.findallpattern,string返回字符def is_valid_emailemail:母数字下划线,\s匹配空白字符串中所有匹配的子串列表return量词*表示0次或多次,+表示1次或多boolre.matchemail_pattern,re.finditerpattern,string返回匹次,表示0次或1次,{n}表示恰好n email配对象的迭代器验证手机号码(中国大陆11位)次,{n,m}表示n到m次re.subpattern,repl,string替换匹phone_pattern=r^1[3-9]\d{9}$锚点^匹配行首,$匹配行尾,\b匹配配的子串def is_valid_phonephone:单词边界使用re.compile可以预编译正则表达return式,提高重复使用的效率boolre.matchphone_pattern,phone面向对象编程初步面向对象的基本概念定义class语法面向对象编程OOP是一种编程范式,它将数据和行为组织到对象中Python是一种Python使用class关键字定义类支持多种编程范式的语言,包括面向对象编程class ClassName:OOP的核心概念类文档字符串,描述类的功能•类Class定义对象的属性和方法的模板#类变量class_variable=value•对象Object类的实例,每个对象有自己的状态•属性Attribute对象的数据成员#初始化方法•方法Method对象的函数成员,定义对象的行为def__init__self,params:self.instance_variable=value•继承Inheritance允许子类继承父类的特性•封装Encapsulation隐藏内部实现细节#实例方法•多态Polymorphism同一接口,不同实现def method_nameself,params:方法文档字符串#方法实现创建对象obj=ClassNamearguments访问属性和方法obj.attributeobj.method类的属性与方法类属性实例属性类属性是属于类的变量,所有实例共享同一副本在类定义体中直接定义,实例属性是属于类实例的变量,每个对象有自己的副本通常在__init__方不在方法内修改类属性会影响所有实例,除非实例有同名的实例属性法中通过self.attribute_name定义每个实例可以有不同的属性值特殊方法实例方法特殊方法(魔术方法)是以双下划线开头和结尾的方法,如__init__、实例方法是定义在类中的函数,第一个参数始终是self,表示实例本身通__str__、__repr__等它们实现了Python的特殊语法和内置函数,如过实例调用时,self参数自动传入实例方法可以访问和修改实例属性和类对象创建、字符串表示等属性示例class Student:#类属性school=Python大学def__init__self,name,age:#实例属性self.name=nameself.age=age#实例方法def introduceself:return f我叫{self.name},今年{self.age}岁,就读于{Student.school}构造方法__init__构造方法的作用参数传递属性初始化__init__方法是Python类的构造方法,在创建对象时自动构造方法可以接受参数,这些参数在创建对象时提供构造方法通常用于调用主要用于初始化对象的属性,设置对象的初始状态class Person:
1.从参数初始化实例属性构造方法不返回值,即使有return语句也会被忽略def__init__self,name,age:
2.设置默认属性值构造方法是可选的,如果不定义,Python会提供一个默认的self.name=name
3.执行必要的验证检查空构造方法但大多数有意义的类都需要自定义构造方法来self.age=age初始化对象状态
4.调用辅助方法完成复杂初始化创建对象时必须提供这些参数示例person=Person张三,25class BankAccount:可以设置默认参数值,使参数变为可选def__init__self,account_number,balance=0:def__init__self,name,age=18:self.account_number=account_numberself.balance=balanceself.transaction_history=[]self.active=Trueself._validate_account继承与多态基础继承基本概念子类继承父类的属性和方法,实现代码重用和层次结构继承语法2使用class SubClassBaseClass定义子类与父类的关系方法重写子类可以重新实现父类的方法以改变行为继承是面向对象编程的核心概念之一,允许子类继承父类的特性,并可以添加或修改行为Python支持单继承和多继承继承语法示例class Animal:def__init__self,name:self.name=namedef speakself:passclass DogAnimal:def__init__self,name,breed:super.__init__name#调用父类构造方法self.breed=breeddef speakself:return汪汪汪!方法重写(覆盖)是多态的体现,子类可以重新实现父类的方法super函数用于调用父类方法,特别是在构造方法中初始化父类部分的属性多态使不同类可以对相同消息作出不同响应,增强了代码的灵活性和可扩展性第三方库与包管理Python的强大之处在于其丰富的第三方库生态系统pip是Python的包管理工具,用于安装、更新和删除包基本用法安装包pip install包名安装指定版本pip install包名==版本号升级包pip install--upgrade包名卸载包pip uninstall包名列出已安装的包pip list热门Python库包括NumPy(数值计算)、Pandas(数据分析)、Matplotlib/Seaborn(数据可视化)、Requests(HTTP请求)、Django/Flask(Web开发)、Scikit-learn(机器学习)、TensorFlow/PyTorch(深度学习)虚拟环境工具如venv、virtualenv可以为不同项目创建隔离的Python环境,避免依赖冲突requirements.txt文件用于记录项目依赖,便于在不同环境中重现相同的包环境综合案例双色球选号1需求分析双色球由6个红球和1个蓝球组成红球号码为1-33,蓝球号码为1-16需要随机生成一组不重复的红球号码和一个蓝球号码实现逻辑使用random模块生成随机数利用列表存储号码确保红球号码不重复对红球号码进行排序提供多组号码生成功能核心代码import randomdefgenerate_lottery_numbersnum_sets=1:all_sets=[]for_in rangenum_sets:#生成6个不重复的红球号码1-33red_balls=random.samplerange1,34,6red_balls.sort#生成1个蓝球号码1-16blue_ball=random.randint1,16all_sets.append{red:red_balls,blue:blue_ball}return all_sets输出展示def print_lottery_numbersnumber_sets:for i,numbers inenumeratenumber_sets,1:red_str=.joinf{num:02d}for numin numbers[red]blue_str=f{numbers[blue]:02d}printf第{i}注:红球:{red_str}|蓝球:{blue_str}numbers=generate_lottery_numbers5print_lottery_numbersnumbers综合案例学员信息管理2数据结构设计使用字典存储学员信息,文件保存数据功能模块实现增删改查、数据持久化、交互界面菜单系统构建清晰的用户操作流程与反馈机制这个综合案例展示了如何使用Python的多种特性(字典、文件IO、函数等)构建一个简单的学员管理系统系统提供添加、删除、查询、修改、显示全部学员信息等功能,并通过文件保存数据主要实现思路
1.用字典保存每个学员的信息(姓名、年龄、成绩等)
2.用列表保存所有学员的字典,形成嵌套结构
3.实现增删改查等操作函数
4.使用文件读写保存数据,实现持久化
5.构建交互式菜单,让用户选择操作此案例综合运用了之前学习的几乎所有知识点,包括数据类型、控制流、函数、文件操作等,是一个很好的实践项目课程总结与学习建议90%3+1000+Python基础知识覆盖率月学习周期推荐练习代码行数通过本课程,你已掌握了Python编程的核心概念和持续练习才能真正掌握编程技能编程能力提升需要大量实践技能恭喜你完成Python编程基础课程!我们已经系统地学习了Python的核心概念,从环境配置到基础语法、数据类型、流程控制、函数、文件操作、异常处理,以及面向对象编程的初步内容学习编程是一个持续的过程,建议
1.每天编写代码,巩固所学知识
2.尝试解决实际问题,从简单到复杂
3.阅读优质代码,学习编程风格和技巧
4.参与开源项目或编程社区,与他人交流学习进阶学习方向可以包括Web开发Django/Flask、数据分析Pandas/NumPy、机器学习scikit-learn、自动化脚本等选择一个感兴趣的方向深入学习,通过实际项目巩固技能记住编程能力来自于持续的学习和实践!。
个人认证
优秀文档
获得点赞 0