人工智能通识基础教程 课件 第二章 人工智能语言Python基础_第1页
人工智能通识基础教程 课件 第二章 人工智能语言Python基础_第2页
人工智能通识基础教程 课件 第二章 人工智能语言Python基础_第3页
人工智能通识基础教程 课件 第二章 人工智能语言Python基础_第4页
人工智能通识基础教程 课件 第二章 人工智能语言Python基础_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

第二章人工智能语言Python基础ArtificialIntelligenceProgrammingwithPython目录01知识与能力目标了解Python核心优势、掌握基础语法02思政目标培养科学精神、增强创新意识03Python语言简介及开发环境发展历程、优势、环境搭建04Python语法基础IPO模型、程序构成、变量、输入输出05基本数据类型数字类型、字符串、类型转换06程序控制条件表达式、选择结构、循环结构07列表和元组创建访问、增删改查、排序、拷贝08字典与集合创建访问、遍历、集合运算09函数定义调用、参数传递、lambda、作用域、递归10文件与异常文件操作、CSV处理、异常处理11常用库介绍random、time、jieba库12本章小结知识回顾与总结知识与能力目标1了解Python核心优势了解Python作为人工智能领域主流编程语言的核心优势,包括语法简洁、功能强大、生态丰富的特点及其在数据处理、机器学习、深度学习等领域的广泛应用。2掌握Python基础语法掌握Python基础语法知识,涵盖数据类型、运算符、程序控制结构、组合数据类型的定义与使用方法。3熟练运用函数与文件操作熟练运用Python函数、文件操作及异常处理机制,建立规范的编程流程。4掌握常用库的基本用法掌握random、time、jieba等常用库的基本用法。5夯实Python基础编程能力夯实Python基础编程能力,为后续人工智能算法实现与项目开发奠定坚实基础。思政目标培养科学精神通过在编程学习中强调代码的正确性、逻辑性与可维护性,培养严谨求实的科学精神,树立对数据和结果负责的工作态度。增强创新意识通过借助Python的开放生态探索人工智能前沿技术,自主查阅资料并开展实践操作,增强创新意识与自主学习能力,养成持续探索的学习习惯。树立信息安全意识通过在文件处理、数据操作等教学环节中分析数据隐私保护、算法公平性案例,树立信息安全意识与社会责任意识,理解技术应用的伦理边界。弘扬开源精神通过在编程与项目实践中参与合作开发、共享代码资源,理解开源精神的内涵,提升沟通协作能力,弘扬互助互信的团队价值观。2.1Python语言简介及开发环境Python的发展历程1991年荷兰程序员GuidovanRossum发布了Python的首个公开版本0.9.01994年Python1.0:引入lambda、map、filter等函数式编程工具2000年Python2.0:加入垃圾自动回收机制和列表推导式,社区生态快速扩大2008年Python3.0:作出不向后兼容的重大架构调整2020年Python官方正式停止对2.x版本的维护,3.x系列成为唯一发展主线2019年起采用"每年10月发布一个主要小版本(3.x.0)"的更新策略最新发展数据截至2025年8月,Python继续稳居TIOBE编程语言排行榜首位,综合评分达26.14%,几乎等同于C++(9.18%)、C(9.03%)与Java(8.59%)评分之和。Python在人工智能领域的优势1语法简洁,学习门槛低Python语言设计强调可读性和友好性,语法直观、结构清晰,使初学者能够快速掌握编程基础并实践AI项目,显著降低学习成本,缩短入门周期。2生态强大,库与框架支持全面Python拥有庞大而成熟的第三方库生态,为人工智能开发提供全流程支持:•数据处理层:NumPy、Pandas•机器学习层:Scikit-learn•深度学习层:TensorFlow、Keras、PyTorch3跨平台性强,部署灵活高效Python支持Windows、Linux、macOS等主流操作系统,开发者编写的程序可在不同平台间直接迁移运行,有利于模型部署、系统扩展与多场景应用落地。4编程范式灵活,适配多类应用需求Python同时支持命令式、面向对象与函数式等多种编程思想,可用于快速脚本编写,也能支撑大规模复杂系统开发,为多样化的人工智能场景提供了良好的技术适应性。搭建Python开发环境开发环境核心组成CPython解释器Python程序的执行引擎,负责将源代码逐行解释并运行标准库内置多种常用功能模块,涵盖文件读写、系统调用、网络通信等IDLE集成开发环境官方提供的轻量级图形化开发工具,支持代码编辑、交互式执行及调试pip包管理器用于安装、升级与管理第三方扩展库,连接Python庞大生态体系Windows平台安装步骤1下载Python官方安装包:打开Python官方网站,进入"Downloads"页面,下载对应版本的安装包2运行安装程序:双击运行下载的安装包,勾选"AddPythontoPATH"选项,以便系统自动完成环境变量配置3验证安装:打开命令提示符(cmd),输入python--version或python3--version,若能正常显示Python版本信息,则表示安装成功第一个Python程序通常,学习一门编程语言的第一步是输出"HelloWorld!"。这一程序不仅象征编程学习的正式开始,也有助于初学者熟悉开发环境与程序的编写、保存与运行流程。操作步骤1打开IDLE在桌面或"开始"菜单中找到并启动IDLE2创建新文件点击菜单栏"File"→"NewFile"3编写代码在编辑窗口中输入代码4保存并运行点击"File"→"Save"保存,然后点击"Run"→"RunModule"或按F55查看输出结果程序执行后,输出结果将显示在IDLE的交互式窗口中代码示例#第一个Python程序print("HelloWorld!")输出结果HelloWorld!说明:该语句调用print()函数,将括号内的字符串输出到屏幕。程序的两种运行方式交互方式特点通过Python解释器的交互式命令行(如IDLE的Shell窗口)直接输入并立即执行代码,适用于测试简短语句或快速验证程序逻辑。操作步骤1.启动IDLE,界面下方出现提示符>>>2.在提示符后键入Python语句,如:print("Hello,World!")3.按下Enter键,即可在同一窗口中看到执行结果优势无需创建文件即可完成运行,非常适合进行语法练习、调试表达式及理解程序执行过程,是初学者上手Python的理想方式。文件方式特点将完整的Python代码编写并保存为扩展名为.py的脚本文件,再一次性执行其中的全部指令。适用场景适用于编写结构化程度较高、需要多次调试或进行版本管理的程序。将代码保存为文件后,可以随时修改、重复运行并方便进行项目维护与功能扩展。优势是Python程序开发的主要工作方式,便于代码管理、版本控制和团队协作。2.2Python语法基础程序编写的基本方法:IPO模型IPO模型是程序设计最基本的执行流程,包括输入(Input)、处理(Process)和输出(Output)三个阶段。输入Input程序从外部获取数据。在Python中,最常用的输入方式是内置函数input()。#输入示例name=input("Pleaseenteryourname:")print("Hello,",name)输出结果:Pleaseenteryourname:AliceHello,Alice注意:input()函数输入的内容默认为字符串,如需数值类型,需要进行类型转换。处理Process程序的核心逻辑部分,包括计算、判断、循环等操作。#处理示例:字符串转数值并求和num1=input("Enterthefirstnumber:")num2=input("Enterthesecondnumber:")sum=int(num1)+int(num2)print("Thesumis:",sum)此处使用int()将用户输入的字符串转换为整数,再进行加法运算。输出Output将处理结果展示给用户的阶段。在Python中,使用print()函数实现输出。#输出示例sum=15print("Thesumis:",sum)输出结果Thesumis:15该语句会将变量sum的值输出到屏幕上,使用户直观看到程序结果。Python程序的基本构成:注释注释用于对代码功能、关键逻辑或复杂语句进行解释说明,不会被解释器执行,是提升代码可读性的重要手段。单行注释单行注释以#开头,从该符号到行尾的内容均为注释。#这是一个单行注释的例子print("Hello,World!")#输出"Hello,World!"单行注释适用于简短的说明,可以单独成行或放在代码行末尾。多行注释多行注释使用三个连续的单引号'''或双引号"""表示,通常用于函数、模块或复杂逻辑的说明。'''这是一个多行注释示例可以跨多行说明模块或函数功能'''print("WelcometoPython!")多行注释也可作为文档字符串(docstring),用于自动生成文档。最佳实践:通过合理使用注释,开发者可以清晰地解释代码逻辑,便于团队协作和后续维护。Python程序的基本构成:缩进与语句续行缩进Python通过缩进表达代码块结构,是语言语法的重要组成部分。属于同一代码块的语句必须使用一致的缩进,一般为4个空格。正确缩进示例ifTrue:print("这行代码由于缩进而被执行")print("这行代码在if语句外部")错误缩进示例ifTrue:print("错误的缩进会导致错误")print("这行代码由于缩进错误而不被执行")初学者应特别注意,在缩进代码时不要混用Tab与空格!语句续行当一条Python语句过长时,可使用反斜杠"\"将语句拆分为多行,以提高可读性。使用反斜杠续行total=1+2+3+\4+5+6print(total)使用括号自动续行圆括号()、方括号[]、花括号{}内均支持自动续行:total=(1+2+3+4+5+6)print(total)注意:"\"后不可添加空格或注释。标识符及命名规则在Python中,标识符用于命名变量、函数、类等对象。合理命名标识符对于代码的可读性和可维护性至关重要。标识符的命名规则1.首字符要求标识符的首字符必须是字母(a-z,A-Z)或下划线_,不能以数字开头。2.可包含的字符首字符之后,可以继续使用字母、数字(0-9)或下划线_组成标识符。3.大小写敏感Python区分大小写,例如Variable与variable是两个不同的标识符。约定:变量、函数命名使用小写字母+下划线(如score_total);类名采用单词首字母大写的驼峰命名法(如StudentInfo)。避免使用关键字关键字(keyword)是Python语言保留字,用于定义语法结构,不可作为标识符使用,如if、while、class等。查看关键字列表importkeywordprint(keyword.kwlist)Python3.13.6关键字列表:['False','None','True','and','as','assert','async','await','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']变量与赋值语句在Python中,变量是存储数据的基本单元。Python属于动态类型语言,变量无需事先声明类型,而是根据赋值内容自动确定类型。变量的定义与赋值name='Python'其中,name为变量名,'Python'为字符串对象,该赋值语句使name指向该字符串。在使用变量之前必须通过赋值语句初始化,否则会触发NameError。动态类型变量的类型由其绑定的对象决定,并可在运行过程中改变:x=10#此时变量x是整数(int类型)print(type(x),x)x="hello"#现在变量x变成了字符串(str类型)print(type(x),x)从结果可见,变量x的类型随赋值变化。动态类型提高开发灵活性,但也需要开发者保持对变量类型的清晰认知。赋值语句Python使用=完成赋值,并支持多种赋值方式:1.普通赋值x=100y="Hello,World!"2.链式赋值同时为多个变量赋相同的值:x=y=z=2003.解包赋值序列中的值按顺序赋给对应变量:a,b,c=3,4,54.变量交换无需使用临时变量:a,b=b,a输入与输出语句:input()函数Python使用input()函数从控制台获取用户输入,其返回值类型始终为字符串。基本用法name=input("请输入您的姓名:")print("Hello",name)执行过程:1.程序暂停等待用户输入2.用户输入内容并按下Enter3.输入的字符串赋给变量name4.程序继续执行后续代码重要提示:由于input()返回的是字符串,当需要进行算术运算时应先进行类型转换。类型转换示例m=input("输入一个整数:")print(int(m)*2)#将输入的字符串转换为整数后进行乘法运算运行示例输入一个整数:510这里使用int()将输入的字符串转换为整数,然后乘以2。常用类型转换函数int(x)→整数float(x)→浮点数str(x)→字符串bool(x)→布尔值输入与输出语句:print()函数基本用法Python使用print()函数将数据输出到屏幕。它可输出变量、表达式结果或提示信息,帮助调试与结果展示。print()基本用法print()函数可以接受多个表达式作为参数,并将这些表达式的值依次输出到控制台。print(3,"*",4,"=",3*4)输出结果3*4=12特点:•多个参数间默认以空格分隔•输出结束后自动换行更多示例输出变量name="Alice"age=20print("姓名:",name)print("年龄:",age)输出:姓名:Alice年龄:20输出表达式a=10b=20print("a+b=",a+b)print("a*b=",a*b)输出:a+b=30a*b=200输入与输出语句:自定义输出格式print()提供sep和end参数,分别用于自定义分隔符和行尾结束符。sep参数:修改分隔符使用sep参数可以指定多个输出项之间的分隔符,默认为空格。print(3,"*",4,"=",12,sep="-")输出结果3-*-*-4-=-12更多sep示例#使用逗号分隔print("北京","上海","广州",sep=",")#输出:北京,上海,广州#不使用分隔符print("Hello","World",sep="")#输出:HelloWorldend参数:修改行尾符使用end参数可以指定输出结束时的字符,默认为换行符\n。print(3,"*",4,"=",12,end="")print("继续在同一行输出")输出结果3*4=12继续在同一行输出更多end示例#不换行,使用空格结尾print("Hello",end="")print("World")#输出:HelloWorld#使用特定符号结尾print("Loading",end="...")print("Done")#输出:Loading...Done输入与输出语句:格式化输出(f-string)f-string(适用于Python3.6及以上版本)以其语法简洁、执行高效成为主流选择。基本语法是在字符串前添加前缀f或F,并在花括号{}中插入变量名或任意可求值表达式。基本用法name="小明"age=12score=92print(f"{name}今年{age}岁,他的成绩是{score}分。")输出结果小明今年12岁,他的成绩是92分。f-string的优势✓语法简洁,可读性强✓执行效率高✓支持任意表达式✓代码更直观易懂更多示例表达式计算a=10b=20print(f"{a}+{b}={a+b}")#输出:10+20=30函数调用name="python"print(f"字符串长度:{len(name)}")#输出:字符串长度:6格式化数字pi=3.1415926print(f"圆周率:{pi:.2f}")#输出:圆周率:3.14对齐输出name="Alice"print(f"|{name:>10}|")#输出:|Alice|2.3基本数据类型数字类型:整数与浮点数Python内置多种数字类型,常见类型包括:整数(int)、浮点数(float)、复数(complex)和布尔类型(bool)。整数(int)用于表示没有小数部分的数值。在Python3中,整数的表示范围仅受内存限制,可处理任意大小的整数,无溢出风险。a=100#整数b=-2500#负整数print(a,b)应用场景:常用于计数、索引等场景。浮点数(float)用于表示带小数部分的数值。Python使用双精度浮点格式进行表示,适合科学计算和金融运算等精度要求较高的场景。pi=3.14159#浮点数sci=1.23e4#浮点数(科学记数法)print(pi,sci)科学计数法:1.23e4表示1.23×10⁴=12300.0数字类型:复数与布尔类型复数(complex)复数由实部和虚部组成,Python内置对复数的支持,可直接进行运算。复数的表示形式为a+bj,其中j为虚数单位。z=3+4jprint(z.real)#输出3.0,表示复数z的实部print(z.imag)#输出4.0,表示复数z的虚部应用场景:常用于信号处理、图像分析和工程建模等领域。布尔类型(bool)布尔类型用于表示逻辑值,取值仅为True或False。它在条件判断、循环控制与逻辑表达式构建中广泛使用。flag=Trueprint(flag+1)#输出2,因为True等价于1print(3>5)#输出False,因为3不大于5重要特性:布尔值本质上是整数的子类型:True等价于1,False等价于0,因此可参与数值运算。算术运算符Python提供了一组功能完善的算术运算符,用于执行加、减、乘、除等数值计算操作。这些运算符不仅可用于整数(int)和浮点数(float),也可在二者混合时自动完成类型提升(通常提升为浮点数)。运算符功能说明示例+加法,将两个数字相加7+3#结果为10-减法,从一个数字中减去另一个数字7-3#结果为4*乘法,将两个数字相乘7*3#结果为21/除法,结果为浮点数7/3#结果为2.333...//整除,只取整数部分7//3#结果为2%取余,返回除法余数7%3#结果为1**幂运算,计算一个数的指数次方7**3#结果为343运算符优先级在Python中,运算符的优先级遵循数学中的常规顺序:先进行幂运算,然后是乘除,最后是加减。优先级保证运算按预期顺序执行,但在复杂表达式中,可以使用括号明确顺序。result=1+2*3#输出7,因为先进行乘法运算result=(1+2)*3#输出9,因为括号改变了运算顺序字符串类型:表示与索引切片字符串是Python中用于存储文本信息的基本数据类型。字符串属于不可变序列类型,即一旦创建,其内容无法修改。字符串的表示字符串可用单引号'...'、双引号"..."或三引号'''...'''、"""..."""表示。s1='hello'#单引号字符串s2="world"#双引号字符串s3='''多行字符串示例'''print(s1,s2)#输出:helloworldprint(s3)#输出多行字符串示例单引号和双引号用于单行文本,三引号可表示多行文本或包含特殊字符的内容。字符串索引和切片字符串是有序字符序列,可以通过索引访问单个字符,通过切片提取子串。text="Python"print(text[0])#输出:'P'print(text[-1])#输出:'n'word="abcdefg"print(word[1:4])#输出:'bcd'print(word[:3])#输出:'abc'print(word[::2])#输出:'aceg'切片语法:序列[start:end:step]•start:起始索引(含),默认为0•end:结束索引(不含)•step:步长,默认为1切片操作不会修改原字符串,而是返回一个新的字符串对象。字符串类型:操作符与内置方法字符串操作符+拼接字符串greet="Hello"+","+"World!"#结果:"Hello,World!"*重复字符串echo="Ha"*3#结果:'HaHaHa'in/notin成员判断print('o'ingreet)#Trueprint('z'notingreet)#True常用字符串内置方法方法功能说明示例lower()/upper()转换为小写/大写"Python".lower()#"python"strip()去除两端空白字符"hi\n".strip()#"hi"replace(old,new)将子串old替换为new"abcabc".replace("a","A")#"AbcAbc"split(sep)按分隔符拆分字符串"a,b,c".split(",")#['a','b','c']join(iterable)用分隔符连接元素"-".join(["A","B"])#"A-B"find(sub)/index(sub)查找子串起始位置"abc".find("b")#1find()找不到返回-1,index()找不到会报错强制类型转换:类型转换函数为了确保程序逻辑正确执行,或满足特定函数对参数类型的要求,往往需要显式地将一种数据类型转换为另一种,这一过程称为强制类型转换(TypeCasting)。方法功能说明int(x)将参数x转换为整数类型。若x为数字字符串(如"123"),则转换为整数123;若x不是可解释为整数的字符串(如"abc"),则会抛出ValueError异常。float(x)将参数x转换为浮点数类型。例如,"3.14"将被转换为3.14。str(x)将参数x转换为字符串类型。无论x是整数、浮点数还是其他对象,均可转换为字符串形式。例如,str(123)的结果为"123"。bool(x)将参数x转换为布尔(bool)类型。以下对象的布尔值为False:False、None、数值0、空字符串""、空序列(如[]、())以及空集合或字典。除这些以外的对象,其布尔值均为True。#将字符串转换为整数num_str="42"num=int(num_str)print(num)#输出:42#将浮点数转换为字符串pi_str=str(3.1415)print(pi_str)#输出:"3.1415"强制类型转换:注意事项强制类型转换虽常用,但需遵循以下规则以避免错误:1.确保参数可解释使用int()或float()时,若传入的不是合法数字形式,将抛ValueError异常:int("123")#正确,返回整数123int("abc")#错误,抛出ValueError2.转换结果影响后续操作str()转换后的值为字符串,不能直接参与数学运算:num=123str_num=str(num)print(type(str_num))#输出:3.浮点转整数为截断而非四舍五入当浮点数被转换为整数时,Python会直接舍去小数部分:print(int(3.99))#输出:3print(int(-2.5))#输出:-2如需四舍五入,请使用round()函数。4.避免滥用eval()eval()会执行传入字符串,有严重安全隐患,尤其是处理用户输入时:expr=input("请输入一个表达式:")result=eval(expr)#潜在风险:用户输入恶意代码警告:eval()可能执行任意代码,存在安全风险,应谨慎使用!2.4程序控制条件表达式:关系运算符关系运算符用于比较两个值的大小或相等性,其运算结果为布尔值(True或False)。运算符描述示例结果==等于5==5.0True!=不等于3!=2True>大于10>7True<小于3<2False>=大于等于5>=5True<=小于等于4<=3False链式比较Python中的比较运算符支持链式比较,这是许多其他语言不具备的特性:x=5print(1<x<10)#输出:True该语句等价于1<xandx<10,但写法更加简洁、直观。条件表达式:逻辑运算符逻辑运算符用于连接或组合多个条件表达式,以构建更复杂的逻辑判断。Python提供and、or、not三种逻辑运算符,并且均具有短路特性。and逻辑与只有当所有操作数都为True时,结果才为True。具有短路特性:如果第一个操作数为False,则不会计算后面操作数。x=5result=(x>0)and(x<10)print(result)#输出:True判断x是否同时大于0且小于10,由于x=5满足两个条件,因此结果为True。or逻辑或只要其中任意一个条件为True,结果即为True。具有短路特性:如果第一个操作数为True,则不会计算后面操作数。x=5result=(x<0)or(x>100)print(result)#输出:False检查x是否小于0或大于100。由于x=5不满足任一条件,因此结果为False。not逻辑非用于对布尔值进行取反操作。当操作数为True时,结果为False;当操作数为False时,结果为True。x=5result=not(x==5)print(result)#输出:False条件x==5的结果为True,经not运算符取反后,最终结果为False。逻辑运算符的优先级逻辑运算符的优先级为:not>and>or。在复杂的表达式中,可以使用括号来明确运算顺序,确保逻辑判断的正确性。条件表达式的特殊现象短路求值如果根据已计算的部分表达式即可确定最终结果,Python会跳过后续表达式的计算。x=0y=5result=x!=0andy/x>2#不会引发除以零错误result=x>0ory/0>2#不会引发除以零错误短路求值常用于避免非法运算与提升程序运行效率。布尔值与数值等价性在Python中,布尔值是整数的子类:True等价于1,False等价于0,因此布尔值可以参与数值运算。print(True+True)#输出:2print(False*10)#输出:0这一特性在统计逻辑条件成立次数等场景中非常实用。浮点数比较陷阱由于二进制浮点表示存在精度误差,直接比较浮点数可能导致逻辑判断失真。print(0.1+0.2==0.3)#输出:False为了避免这种陷阱,可以使用math.isclose()函数进行近似比较:importmathprint(math.isclose(0.1+0.2,0.3))#输出:Truemath.isclose()是浮点比较的推荐方法。内置布尔函数Python提供了多个内置布尔函数,可直接对对象的"真值属性"进行判断。bool()用于将任意对象转换为布尔值。判断规则:•数值类型:0为False,非零为True•序列或容器:空为False,非空为Trueprint(bool(0))#输出:Falseprint(bool(""))#输出:Falseprint(bool([]))#输出:Falseall()用于判断可迭代对象内所有元素是否均为True。返回值:•全为True或对象为空→返回True•只要有一个元素为False→返回Falseprint(all([True,1,"hello"]))#Trueprint(all([True,0,"hello"]))#Falseany()用于判断可迭代对象中是否至少存在一个True。返回值:•存在任意True→返回True•全部为False或对象为空→返回Falseprint(any([False,0,""]))#Falseprint(any([False,1,""]))#True实际应用示例age=int(input("请输入年龄:"))ifage>=0andage<=120:print("有效年龄")else:print("无效年龄")选择结构:单分支与双分支if单分支结构单分支结构用于在条件成立时执行相应语句,否则直接跳过。语法格式ifcondition:statement_block语法说明:•条件表达式必须以冒号结束•执行语句块必须保持一致缩进(推荐4个空格)•条件表达式应能求出布尔值示例:温度预警系统temperature=38.5iftemperature>37.5:print("体温异常!建议复查")输出结果:体温异常!建议复查if-else双分支结构双分支结构表示"二选一"的执行方式,根据条件成立与否执行不同语句块。语法格式ifcondition:statement_block_trueelse:statement_block_false语法说明:•条件成立执行if分支,否则执行else分支•适用于具有明确相对关系的两种结果示例:判断奇偶数number=int(input("请输入一个整数:"))ifnumber%2==0:print("偶数")else:print("奇数")选择结构:多分支结构当存在多个互斥条件且需依次判断时,可使用多分支结构。语法格式ifcondition1:statement_block1elifcondition2:statement_block2...else:statement_block_default语法说明•elif是elseif的缩写,可出现多次•自上而下判断条件,首次满足即执行对应代码块并结束判断•else可选,用于处理所有条件均不满足的情况编写注意事项✓条件排列要合理:应先判断最严格或最常见的条件✓条件区间互斥:避免相互重叠导致逻辑错误✓覆盖所有情况:在必要时添加else提高鲁棒性示例:成绩等级评定score=85ifscore>=90:grade='A'elifscore>=80:grade='B'elifscore>=70:grade='C'elifscore>=60:grade='D'else:grade='F'print(grade)输出结果B由于score=85,满足score>=80的条件,因此grade被赋值为'B'。执行流程1.判断score>=90?否(85<90)2.判断score>=80?是(85>=80)→执行grade='B'3.跳过后续条件判断循环结构:for循环for循环常用于遍历序列,将序列中的每个元素依次取出,并执行一次循环体。基本语法for变量in序列:循环体语句执行流程1.依次取出序列元素2.赋给循环变量3.执行循环体4.直到序列耗尽,循环结束示例:遍历列表fruits=["苹果","香蕉","橙子"]forfruitinfruits:print(fruit)输出结果:苹果香蕉橙子使用range()函数range()用于生成整数序列,常与for一起使用来控制循环次数。其生成结果为半开区间[start,stop)。用法含义range(stop)生成从0到stop-1的整数序列range(start,stop)生成从start到stop-1的整数序列range(start,stop,step)按步长step递增,生成从start到stop-1的整数序列示例:打印0到4的数字foriinrange(5):print(i,end='')输出结果:01234本例中range(5)生成序列[0,1,2,3,4],循环变量i依次取得序列中的每个整数。循环结构:嵌套for循环循环内部可以再包含一个或多个循环,这种结构称为嵌套循环。嵌套for循环常用于处理二维数据或更复杂的场景。示例:打印九九乘法表foriinrange(1,10):forjinrange(1,i+1):print(f"{j}x{i}={i*j}",end="\t")print()输出结果1x1=11x2=22x2=41x3=32x3=63x3=91x4=42x4=83x4=124x4=161x5=52x5=103x5=154x5=205x5=251x6=62x6=123x6=184x6=245x6=306x6=361x7=72x7=143x7=214x7=285x7=356x7=427x7=491x8=82x8=163x8=244x8=325x8=406x8=487x8=568x8=641x9=92x9=183x9=274x9=365x9=456x9=547x9=638x9=729x9=81执行流程说明外层循环循环变量i从1递增至9,对应乘法表的行数。内层循环每进入外层循环一次,内层循环变量j从1递增至i,依次与i相乘并输出一个乘法表达式。换行操作内层循环执行完毕后,通过print()换行,从而形成上三角布局的九九乘法表。关键点:外层循环控制行数,内层循环控制每行的列数,print()函数用于换行。循环结构:while循环while循环适用于循环次数不确定、由条件表达式控制结束时机的场景。基本语法while条件表达式:循环体语句执行流程1.先判断条件表达式是否为True2.若条件成立则执行循环体3.循环体执行完毕后再次判断条件4.重复上述过程,直至条件为False时终止循环示例:从1输出到5count=1whilecount<=5:print(count,end='‘)count+=1输出结果:12345for循环vswhile循环特性for循环while循环适用场景循环次数明确或遍历序列循环次数不确定,由条件控制典型应用遍历列表元素等待用户输入正确结果才结束循环变量自动从序列中获取需要手动初始化和更新注意事项使用while循环时,务必确保循环条件最终会变为False,否则会导致无限循环。选择建议•当需要遍历列表、元组、字符串等序列时,使用for循环•当循环次数不确定,需要根据条件判断是否继续时,使用while循环循环控制语句:break与continuePython提供break和continue两种控制语句,用于动态调整循环执行流程,使循环逻辑更灵活高效。breakbreak语句用于立即终止当前循环,程序将跳转至循环之后的语句继续执行。常用于查找并提前结束的任务。示例:查找第一个能被7整除的数fornuminrange(1,100):ifnum%7==0:print(f"找到第一个能被7整除的数:{num}")break输出结果:找到第一个能被7整除的数:7当找到第一个能被7整除的数(7)时,break语句立即终止循环,不再继续遍历后续数字。continuecontinue语句跳过本次循环体剩余语句,直接进入下一次循环迭代。适用于过滤不满足处理条件的数据。示例:打印1~10中的奇数fornuminrange(1,11):ifnum%2==0:continueprint(num,end='')输出结果:13579当num为偶数时执行continue,跳过print(),仅输出奇数。breakvscontinue对比break:•立即终止整个循环•跳出循环体,执行循环后的代码•适用于找到目标后提前结束continue:•跳过本次循环剩余语句•进入下一次循环迭代•适用于过滤特定条件的数据循环的else子句在Python中,循环结构(包括for和while)可与else子句配合使用。当循环未因break语句提前终止而是正常执行完全部迭代时,else子句才会被执行。工作机制正常结束→执行else若循环在执行过程中没有遇到break,正常执行完全部迭代,则else子句会被执行。break终止→跳过else若循环在执行过程中遇到break并提前退出,则else子句将被跳过。典型应用场景常用于查找类操作:若在循环中找到目标就break停止循环,否则循环结束后由else执行"未找到目标"的处理逻辑。示例:判断质数num=11foriinrange(2,num):ifnum%i==0:print(f"{num}不是质数")breakelse:print(f"{num}是质数")输出结果11是质数执行说明若未找到可整除因子(即没有触发break),则循环正常结束,进入else分支,判定该数为质数。注意:else子句与循环对齐,而不是与if对齐。2.5列表和元组列表:创建与基本访问列表(list)以有序方式存储多个元素,具有可变性(mutable)、元素类型不受限制、支持索引与切片等多样访问方式,是Python中最常用的数据结构之一。创建列表列表可通过[]或list()创建。a_list=[2,3,5,7,11]#整数列表mixed_list=[1,'BA',18.76]#混合类型列表empty=[]#空列表列表特点✓有序存储元素✓元素类型不受限制✓可变性:支持增删改操作✓支持索引和切片访问索引与切片访问列表支持正向与负向索引访问,负索引从末尾开始计数。a_list=[2,3,5,7,11]print(a_list[1])#输出:3print(a_list[-1])#输出:11print(a_list[1:4])#输出:[3,5,7]索引说明正向索引从0开始计数负向索引从-1开始计数(末尾)索引示例list=['a','b','c','d','e']索引:01234负索引:-5-4-3-2-1列表:修改、添加与删除元素修改元素列表是可变序列,可通过索引直接修改元素。a_list=[2,3,5,7,11]a_list[0]=100#原列表变为[100,3,5,7,11]添加元素方法功能说明append(x)末尾追加单个元素extend(iter)将可迭代对象展开后追加insert(i,x)在索引i处插入元素a_list=[100,3,5,7,11]a_list.append(13)#[100,3,5,7,11,13]a_list.extend([17,19])#[100,3,5,7,11,17,19]a_list.insert(2,4)#[100,3,4,5,7,11]删除元素dellist[i]:按索引删除a_list=[100,3,5,7,11]dela_list[0]#删除索引0处的元素#列表变为[3,5,7,11]pop(i):取出并删除取出并删除列表中指定索引的元素。如果不指定索引,则默认删除并返回最后一个元素。last=a_list.pop()#取出并删除最后一个元素remove(x):按值删除删除列表中第一个值为x的元素。a_list.remove(5)#删除列表中第一个值为5的元素列表排序:sort()与sorted()Python为列表排序提供了两种常用工具:list.sort()(原地排序)和sorted()(返回新列表)。sort()列表对象的方法用于原地排序,即直接修改列表本身。list.sort(key=None,reverse=False)参数说明:•key:指定排序依据的函数•reverse:True表示降序,False表示升序(默认)num_list=[3,11,5,8,16,1]num_list.sort(reverse=True)print(num_list)#[16,11,8,5,3,1]执行后,原列表内容被就地修改为降序排列。sorted()内置函数用于对任意可迭代对象进行排序,返回一个新的有序列表,原对象保持不变。sorted(iterable,key=None,reverse=False)参数说明:•iterable:可迭代对象•key:指定排序依据的函数•reverse:True表示降序,False表示升序(默认)num_list=[3,11,5,8,16,1]sorted_list=sorted(num_list,reverse=True)print(sorted_list)#[16,11,8,5,3,1]print(num_list)#[3,11,5,8,16,1](原列表不变)原列表保持不变,返回新的排序后列表。特征list.sort()sorted()所属列表对象的方法内置函数返回值None新列表是否原地修改是否适用对象仅列表任意可迭代对象列表切片进阶列表切片可用于从原列表中提取部分元素或构建新的列表。其基本语法格式为:list[start:stop:step]逆序切片以逆序方式获取列表中的元素,通过设置步长为-1来实现。nums=[3,5,7,9,11]nums[::-1]结果:[11,9,7,5,3]步长切片允许指定切片时元素之间的间隔,跳过某些元素。nums=[3,5,7,9,11]nums[::2]结果:[3,7,11]表示从列表的开始每隔一个元素取一个,即步长为2。赋值切片切片还可以用于批量替换列表中的元素。nums=[3,5,7,9,11]nums[1:3]=[99,100]结果:[3,99,100,9,11]将索引1到索引2的元素替换为[99,100]。切片参数说明start切片起始索引(默认为0)stop切片结束索引(不包含stop指向的元素)step步长(默认为1,负数表示反向切片)浅拷贝与深拷贝在Python中,拷贝操作用于创建对象的副本。根据复制深度不同,拷贝分为浅拷贝(ShallowCopy)和深拷贝(DeepCopy)两种方式。浅拷贝创建一个新对象,但是只复制原始对象中包含的对其他对象的引用。这意味着如果原始对象中的嵌套对象被修改,那么拷贝中相应的对象也会被修改。importcopya=[1,[2,3]]b=a[:]#通过切片创建浅拷贝c=copy.copy(a)#通过copy模块创建浅拷贝a[1][0]=99#修改a中的嵌套列表print(b)#输出[1,[99,3]]b和a指向同一个嵌套列表,所以当修改a中的嵌套列表时,b也会显示相同的修改。深拷贝创建一个新对象,并且递归复制原始对象中包含的所有嵌套对象。这意味着原始对象和拷贝对象完全独立,修改一个不会影响另一个。importcopya=[1,[2,3]]c=copy.deepcopy(a)#通过copy模块创建深拷贝a[1][0]=99#修改a中的嵌套列表print(c)#输出[1,[2,3]]c是a的深拷贝,它们中的嵌套列表是独立的,所以修改a不会影响c。浅拷贝vs深拷贝对比浅拷贝•只复制最外层对象•嵌套对象共享引用•修改嵌套对象会影响拷贝•使用:切片[:]、copy.copy()深拷贝•递归复制所有对象•嵌套对象完全独立•修改嵌套对象不影响拷贝•使用:copy.deepcopy()元组:创建与访问元组(tuple)与列表类似,也可以存储多个有序元素。但其最大特点是不可变(immutable):一旦创建,元素内容不可增删改。因此,元组常被视为一种"只读列表"。创建元组元组使用小括号()定义,元素之间用逗号,分隔。单元素元组t2=(42,)#单元素元组必须在元素后加上逗号,否则Python会将其误解为普通的括号。多元素元组t1=(1,2,3)省略小括号t3=1,2,3#省略括号亦可空元组empty=()包含不同类型元素person=('Alice',30,'Female')访问与切片元组的索引和切片规则与列表完全一致。t=('a','b','c','d','e')print(t[0])#输出:'a'print(t[-1])#输出:'e'print(t[1:4])#输出:('b','c','d')不可变本质元组一旦创建,其中元素的数量及其在各索引位置上的绑定关系便不能再发生变化。t=('by',[1,2],12)t[0]='tea'#错误:尝试修改元组中索引0的元素t[1][0]=31#合法:修改的是列表元素,列表为可变对象如果元组内部包含可变对象(如列表、字典等),则该可变对象的内容仍然可以修改。元组:排序与转换元组排序由于元组是不可变的数据结构,其内部元素的顺序和内容在创建之后不能被修改。因此,元组本身没有提供排序的方法。如果需要对元组中的元素进行排序,可以先使用sorted()函数将元组转换为排序后的列表,然后再将排序后的列表转换回元组。k=(12,23,9)sorted_k=tuple(sorted(k))print(sorted_k)#结果为(9,12,23)执行步骤1.定义包含三个整数的元组k2.利用sorted()函数对其进行排序,返回排序后的列表3.使用tuple()函数将排序后的列表转换为元组列表与元组互转元组转列表使用list()函数可以将元组转换为列表:a=("hello","baby")lst=list(a)print(lst)#结果为['hello','baby']列表转元组使用tuple()函数可以将列表转换为元组:lst=['hello','baby']tpl=tuple(lst)print(tpl)#结果为('hello','baby')转换应用场景•需要对元组进行排序时,先转为列表•需要修改数据时,先转为列表•需要保护数据不被修改时,转为元组•元组可作为字典的键,列表不可以2.6字典与集合字典:创建与访问更新字典是一种以"键-值"对形式存储数据的映射结构。键必须是不可变类型,而值可以是任意类型。字典底层采用哈希表实现,因此查找与更新操作具有较高效率。创建字典1.字面量创建country={'中国':'北京','美国':'华盛顿','法国':'巴黎'}2.空字典empty={}empty_dict=dict()3.序列转换price=dict([('s',1.39),('c',2.59)])4.关键字参数形式price=dict(s=1.39,c=2.59)访问与更新方括号取值country={'中国':'北京','美国':'华盛顿'}capital=country['中国']#'北京'若键不存在,会触发KeyError异常。安全取值capital=country.get('日本','未知')#'未知'在键缺失时返回给定默认值,而不会报错。新增和修改条目country['英国']='伦敦'#新增键'英国'country['中国']='北京直辖市'#修改键'中国'对应的值字典:删除条目字典删除操作分为"精准删除"、"安全删除"、"随机删除"与"整体清空"四类,每种方式适用于不同的业务场景。1.精准删除:del语句deldict[key]会直接移除指定键及其对应的值。若键不存在,Python抛出KeyError异常。country={'中国':'北京','美国':'华盛顿','法国':'巴黎'}delcountry['法国']#删除成功#country变为{'中国':'北京','美国':'华盛顿'}delcountry['德国']#KeyError:'德国'2.安全删除:pop()方法dict.pop(key,default)在键存在时返回该键的值并删除键值对;若键不存在,则返回自定义默认值。capital=country.pop('法国','未找到')#capital='巴黎'unknown=country.pop('德国','未找到')#unknown='未找到',无异常3.随机删除:popitem()方法dict.popitem()按照LIFO(后入先出)顺序弹出并返回最后一个插入的(键,值)元组;字典为空时抛出KeyError异常。country={'英国':'伦敦','日本':'东京'}last=country.popitem()#last=('日本','东京')#country变为{'英国':'伦敦'}4.整体清空:clear()方法dict.clear()将字典一次性清空,使其变为空字典{},但保留原字典对象。country.clear()#country变为{}删除方法对比方法特点键不存在时del精准删除抛出KeyErrorpop()安全删除,可返回值返回默认值popitem()随机删除(LIFO)抛出KeyErrorclear()整体清空无字典:遍历字典提供了三种"视图对象"——keys()、values()、items()——让我们能够以统一的风格遍历其内部数据。keys()获取所有键返回一个可迭代的视图,包含字典的全部键。capitals={'中国':'北京','美国':'华盛顿','法国':'巴黎'}forcountryincapitals.keys():print(country,capitals[country])输出:中国北京美国华盛顿法国巴黎values()获取所有值返回一个可迭代的视图,包含字典的全部值。适用于只关心值而不关心键的场景。forcityincapitals.values():print(city)输出:北京华盛顿巴黎items()获取所有键值对返回一个可迭代的视图,每个元素是(key,value)形式的二元组。forcountry,cityincapitals.items():print(f"{country}的首都是{city}")输出:中国的首都是北京美国的首都是华盛顿法国的首都是巴黎遍历方法选择建议keys()只需要键时使用values()只需要值时使用items()同时需要键和值时使用(推荐)集合:创建与运算集合(set)是一种强调"元素唯一性"和"存储无序性"的数据结构。集合内部基于哈希表实现,成员检测的平均时间复杂度可达到O(1)。创建集合字面量创建A={1,2,3,2}#自动去重为{1,2,3}空集合B=set()#空集合,正确写法空集合必须使用set(),因为{}被Python视为字典。序列转换C=set([1,2,3,2])#列表转集合{1,2,3}chars=set('pypy123')#字符串转集合集合运算并集(Union)符号:|,方法:union()S={1,2,3}T={2,3,4}print(S|T)#{1,2,3,4}交集(Intersection)符号:&,方法:intersection()print(S&T)#{2,3}差集(Difference)符号:-,方法:difference()print(S-T)#{1}对称差(SymmetricDifference)符号:^,方法:symmetric_difference()print(S^T)#{1,4}集合:增删元素与遍历应用添加元素add(x)向集合插入单个元素。若元素已存在,集合保持不变。nums={1,2}nums.add(3)#nums变为{1,2,3}nums.add(2)#无变化,仍是{1,2,3}update(iter)一次性把可迭代对象中的所有元素加入集合,自动去重。nums.update([4,5])#nums变为{1,2,3,4,5}nums.update('abc')#加入字符'a'、'b'、'c'删除元素remove(x)删除指定元素。若元素不存在,抛出KeyError异常。discard(x)功能与remove()相同,但当元素不存在时不抛异常。pop()随机删除并返回一个元素。若集合为空,抛出KeyError异常。clear()瞬间移除所有元素,得到空集合set()。集合遍历与去重应用1.列表去重转回列表words=['apple','banana','apple','pear']unique=list(set(words))#['banana','pear','apple']注意:集合无序,因此unique的顺序可能与原列表不同。2.统计文本中不同单词数量text="applebananaapplepearbanana"words=text.split()unique_count=len(set(words))print("不同单词数量:",unique_count)#3集合的应用场景✓数据去重✓成员检测(in/notin)✓集合运算(并集、交集、差集)✓快速查找2.7函数函数定义:必要性与基本语法当一段代码需要在多处重复执行,或者需要把复杂问题拆成若干小问题时,就需要把代码打包成一个"函数"。函数是一段带名字的、可重复调用的、具有独立功能的代码块。定义函数的必要性1.避免代码冗余,提高复用性将重复出现的操作封装成函数后,程序只需调用函数即可完成相关操作。2.增强程序结构化与模块化设计能力函数能够将一个复杂任务拆分为多个逻辑清晰的子任务,使程序呈现"分层设计、分工明确"的结构。3.提升代码的可读性与可维护性函数通常具有易读、清晰的命名及独立的功能描述,通过阅读函数名即可理解其作用。函数的基本语法def函数名(参数列表):函数体return返回值语法说明•def:定义函数的关键字•函数名:应遵循Python标识符命名规则•参数列表:用于接收外部传入的数据•冒号(:):表示接下来是函数体•函数体:必须缩进(通常为4个空格)•return:用于返回函数的结果示例:加法函数defadd(x,y):z=x+yreturnz该函数接收两个参数x和y,计算它们的和,并将结果返回。函数定义:返回值与文档字符串返回值函数可以通过return语句返回一个值,或者多个值。单个返回值defsquare(x):returnx*x多个返回值Python允许函数同时返回多个值,Python会自动将这些表达式的结果打包成一个元组。defdivide(a,b):quot=a//brem=a%breturnquot,remquotient,remainder=divide(10,3)print(quotient,remainder)#输出:(3,1)若省略return或return后未跟任何内容,则函数默认返回None。函数文档字符串函数的文档字符串(docstring)是放置在函数体首行的三引号字符串,它提供了关于函数功能、参数和返回值的详细描述。defadd(x,y):"""返回两个数字之和参数:x--第一个加数y--第二个加数返回值:两数之和"""returnx+y查看文档字符串help(add)#使用help()函数查看文档字符串可以通过IDE或Python的内置help()函数来读取,使函数的使用说明更加直观和易于获取。函数调用函数调用是Python编程中实现代码复用的基本方式之一。通过函数调用,开发者可以在不同的地方重复使用相同的代码逻辑。调用的本质函数调用的本质是执行函数体中定义的语句。在Python中,调用函数时需要写出函数名,并在其后添加圆括号()。若函数需要输入数据,则在括号内传递实际参数(简称"实参")。print(add(2,3))#输出:5print(add(y=4,x=1))#输出:5,使用关键字参数实参可以按位置顺序传递,也可以通过关键字参数的形式按名字传递。函数的执行时机函数只有在被调用时才会执行。每次调用都会创建独立的局部作用域,用于存储函数内部定义的变量。当函数执行结束后,该局部作用域随即被销毁。函数的嵌套调用函数调用可以嵌套进行,即一个函数的结果可以作为另一个函数的实参。这种方式可以构建复杂的逻辑,同时保持代码的模块化。defsquare(n):returnn*ndefhypot(a,b):return(square(a)+square(b))**0.5print(hypot(3,4))#输出:5.0hypot函数内部调用了square函数,实现了代码的模块化。交互式调试小技巧在

温馨提示

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

评论

0/150

提交评论