Python基础案例教程PPT完整全套教学课件_第1页
Python基础案例教程PPT完整全套教学课件_第2页
Python基础案例教程PPT完整全套教学课件_第3页
Python基础案例教程PPT完整全套教学课件_第4页
Python基础案例教程PPT完整全套教学课件_第5页
已阅读5页,还剩209页未读 继续免费阅读

下载本文档

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

文档简介

Python基础案例教程Lesson_01_计算机基础知识Lesson_02_Python入门Lesson_03_流程控制语句Lesson_04_序列Lesson_05_函数Lesson_06_对象Lesson_07_异常和文件Lesson_08_项目实战全套PPT课件计算机基础知识讲师:本讲目标计算机简介Windows命令行环境变量进制文本文件和字符集计算机简介计算机:用于计算的机器,根据人类的指令来完成各种操作。计算机由两部分组成:硬件和软件通过软件来对计算机进行各种操作(注意:软件中并不是所有的功能都会对用户开放,用户需要调用软件提供的接口(Interface交互界面)来操作计算机)什么是硬件什么是软件Windows命令行命令行就是文本交互界面通过命令行可使用一个一个的指令来操作计算机任何的计算机的操作系统中都包含有命令行(windows、linux、macOS)

进入命令行操作:

win+R进入运行窗口

录入cmd后回车环境变量操作系统中的一些变量环境变量用户环境变量系统环境变量环境变量的配置添加环境变量修改环境变量删除环境变量(path环境变量的配置)练习练习1:进入到环境变量界面,创建一个USERNAME环境变量,修改USERNAME环境变量,并尝试添加多个值,然后删除USERNAME环境变量练习2:在桌面创建一个hello文件夹,文件中创建一个abc.txt输入随意的内容然后将hello的路径添加到path环境变量中,尝试在任意位置访问abc.txt最后将hello路径从path环境变量中删除进制十进制:满十进一的机制(实际生活)十进制一共有10个数字0123456789二进制:满二进一的机制(计算机)十进制一共有2个数字01八进制:满八进一的机制(很少使用)八进制一共有8个数字01234567十六进制:满十六进一的机制(查看二进制数据)十六进制一共有16个数字0123456789ab

c

d

e

f

文本文件和字符集文本文件纯文本:只能保存单一的文本内容富文本:可以保存文本以外的内容(颜色、图片等)

在开发时,编写程序使用的全都是纯文本!纯文本在计算机底层也会转换为二进制保存文本文件和字符集字符集ASCII:美国人编码,使用7位对美国常用的字符进行编码,包含128个字符。ISO-8859-1:欧洲的编码,使用8位,包含256个字符。GB2312:中国国家标准总局1980年发布的编码格式。GBK:国标码,中国的编码。Unicode:万国码,包含世界上几乎所有的语言和符号

编写程序时一般都会使用Unicode编码。Unicode编码有多种实现,UTF-8(常用)UTF-16UTF-32。乱码:编码格式和解码格式不一致时,需检查字符集是否正确Python基础讲师:本讲目标计算机语言Sublime工具的使用Python基础介绍基本概念基础语法字面量和常量变量和标识符数据类型类型检查对象类型转换运算符计算机语言计算机是用于计算的机器,根据人类的指令来完成各种操作低级语言机器语言汇编语言高级语言PythonCC++C#JavaJavaScript低级语言如:机器语言、汇编语言。机器语言:是一种指令集的体系。这种指令集,称机器码(machinecode),是电脑的CPU可直接解读的数据。通过二进制编码来编写程序执行效率高,但编写起来太麻烦.汇编语言:汇编语言(assemblylanguage)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。只适用于某些硬件,兼容性比较差高级语言高级语言:

是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。编写的程序称之为源程序。分类:

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如流行的C、C++、C#、Java、JavaScript、Python...Python语言Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构常见运用:WEB应用(Facebook)、爬虫程序、科学计算、自动化运维、大数据、桌面软件/游戏人工智能开发环境下载安装包python-3.6.5.exe3.x2.xPython和Sublime的整合在Sublime中CTRL+B执行Python代码,但在某些版本的Sublime中对中文支持不好,并且不能使用input()函数使用SublimeREPL来执行python代码

安装完成,设置快捷键[F5]则自动执行当前的Python代码{"keys":["f5"],"caption":"SublimeREPL:Python","command":"run_existing_window_command","args":{"id":"repl_python_run","file":"config/Python/Main.sublime-menu"}}SublimeText3是一个文本编辑器,也是一个代码编辑器SublimeText具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定菜单和工具栏SublimeText是一个跨平台的编辑器,同时支持Windows、Linux、MacOSX等操作系统SublimeText3安装使用PackageControl是SublimeText3中的插件通过该插件可以向Sublime中安装新的包。练习安装SublimeText3,在Sublime中安装PackageControl通过PackageControl安装Sublime的中文语言包

尝试为你的Sublime安装新的主题练习练习1:尝试创建一个py文件,并向文件中写入python打印语句(print...),之后执行该文件。基本概念表达式:语句:完成某种功能,比如打印信息、获取信息、为变量赋值例如:print()、input()、a=10程序:

是由一条一条的语句和一条一条的表达式构成的函数(function):

是一种语句,函数专门用来完成特定的功能基本语法严格区分大小写每一行就是一条语句,每条语句以换行结束每一行语句不要过长(规范中建议每行不要超过80个字符"rulers":[80]一条语句可以分多行编写,多行编写时语句后边以\结尾缩进严格的语言,不要随便写缩进使用#来表示注释,#后的内容都属于注释(解释说明)例如:1,2,3,‘HELLO’,字面量所表示的意思,就是它的字面的值的意思,在程序中可以直接使用字面量字面量和变量字面量在计算机科学中,是用于表达源代码中一个固定值的表示法。字面量就是一个一个的值。

变量可以用来保存字面量,并且变量中保存的字面量是不定的,变量本身没有任何意思,它会根据不同的字面量表示不同的意思。注意:一般我们在开发时,很少直接使用字面量,都是将字面量保存到变量中,通过变量来引用字面量变量是计算机语言中储存计算结果或能表示值的抽象概念。在指令式语言中,变量通常是可变的注意:不能使用没有进行过赋值的变量变量和标识符变量(Python)不需要声明,直接为变量赋值即可为变量赋任意类型的值,也可以任意修改变量的值标识符(Python)所有可以自主命名的内容都属于标识符。例如:变量名、函数名、类名。变量和标识符标识符的使用规范标识符中可以含有字母、数字、_,但是不能使用数字开头

例如:a_1_a1_1a标识符不能是Python中的关键字和保留字,同时也不建议使用Python中的函数名作为标识符,因为这样会导致函数被覆盖。命名规范:在Python中注意遵循两种命名规范:

a.下划线命名法:所有字母小写,单词之间使用_分割。

例如:max_lengthmin_lengthhello_worldxxx_yyy_zzzb.帕斯卡命名法(驼峰命名法):首字母大写,

每个单词首字母大写,其余字母小写。

例如:MaxLengthMinLengthHelloWorldXxxYyyZzz注意:如果使用不符合标准的标识符,将会报错SyntaxError:invalidsyntax。练习练习1:定义几个变量(复杂一些,尝试不同的命名法),然后打印这些变量。数据类型数值整型int浮点型float复数complex布尔bool字符串空值Python中有六大基本类型数字、字符串、元组、列表、字典、集合数据类型数值整型:在Python中所有的整数都是int类型,整数的大小没有限制

(10进制的数字不能以0开头)如果数字的长度过大,可以使用下划线作为分隔符。

例如:c=123_456_789浮点型:浮点数也称为小数,在Python中所有的小数都是float类型

例如:c=1.23c=4.56复数:由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。例如:4.53e-7j数据类型字符串定义:字符串是由数字、字母、下划线组成的一串字符,

它是编程语言中表示文本的数据类型

使用:在Python中字符串用来表示一段文本信息,字符串是程序中使用的最多的数据类型。使用字符串需要使用引号引起来。引号可以是双引号,也可以是单引号。例如:s='hello's=“hello”转义字符:可以使用\作为转义字符

例如:

\"表示“\t表示制表符\n表示换行符\\表示反斜杠数据类型字符串强化“+”号拼接:将两个字符串进行相加,则会自动将两个字符串拼接为一个。例如:a='haha'+'哈哈'。打印时:print("a="+a)多个参数:在“+”号拼接的打印语句中,如果出现非字符串类型的变量,就会报错。为了避免这种情况,就有“,”号拼接。例如:a='haha'+'哈哈'。打印时:print("a=",a)占位符:%s在字符串中表示任意字符%f浮点数占位符,可以进位%d整数占位符,直接舍去小数位通过在字符串前添加一个f来创建一个格式化字符串,在格式化字符串中可以直接嵌入变量。例如:c=f'hello{a}{b}'数据类型字符串强化格式化字符串字符串的赋值将字符串和数字相乘。“*”在Python语言中表示乘法,如果将字符串和数字相乘,则解释器会将字符串重复指定的次数并返回,返回的结果需要重新赋值接收。例如:a=‘a’*20print(a)True表示真-False表示假a=Truea=Falseprint('a=‘,a)布尔值实际上也属于整型True就相当于1,False就相当于0数据类型布尔值(bool)None专门用来表示不存在。例如:b=Noneprint(b)空值(None)练习练习1:创建一个变量保存你的名字,然后通过四种格式化字符串的方式,在命令行中显示,欢迎xxx光临!###参考答案:使用四种方式来输出,欢迎xxx光临name='孙悟空’print('欢迎'+name+'光临!')#-拼串print('欢迎',name,'光临!')#-多个参数print('欢迎%s光临!'%name)#-占位符print(f'欢迎{name}光临!')#-格式化字符串type()函数用来检查值的类型,该函数会将检查的结果作为返回值返回,可以通过变量来接收函数的返回值。类型预览:print(type(1))<class'int'>print(type(1.5))<class'float'>print(type(True))<class'bool'>print(type('hello'))<class'str'>print(type(None))<class'NoneType'>类型检查类型检查可以检查变量中存储的值的类型一切皆对象!Python是一门面向对象的语言程序运行中,所有的数据都是存储到内存当中然后再运行对象就是内存中专门用来存储指定数据的一块区域。对象实际上就是一个容器,专门用来存储数据。像数值、字符串、布尔值、None都是对象。对象概念对象分类可变对象(值可变)不可变对象(值不可变)每个对象中都要保存三种数据(id,type,value)id(标识)每一个对象都有唯一的id可以通过id()函数来查看对象的idid是由解析器CPython生成的,id就是对象的内存地址对象一旦创建,则它的id永远不能再改变对象结构对象的简易内存图

type(类型)类型用来标识当前对象所属的类型

类型决定了对象有哪些功能通过type()函数来查看对象的类型

强类型语言,一旦创建类型不能修改value(值)值就是对象中存储的具体的数据对于有些对象值是可以改变的变量和对象对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名,变量中存储的不是对象的值,而是对象的id(内存地址)使用变量时,实际上就是在通过对象id在查找对象变量中保存的对象,只有在为变量重新赋值时才会改变。变量和变量之间是相互独立的,修改一个变量不会影响另一个变量变量和对象的关系图int()将对象转换为整型

布尔值:True->1False->0

浮点数:直接取整,省略小数点后的内容

字符串:合法的整数字符串,直接转换为对应的数字float()将对象转换为浮点数-布尔值:True->1.0False->0.0

整数:在数字后加.0

字符串:合法的小数字符串,直接转换为对应的数字str()将对象转换为字符串

True->'True’False->'False’123->'123'bool()将对象转换为布尔值

任何对象都可以转换为布尔值类型转换类型转换,将一个类型的对象转换为其他对象。类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新对象运算符是对一个值或多个值进行运算或各种操作运算符概念分类算术运算符赋值运算符比较运算符(关系运算符)逻辑运算符条件运算符(三元运算符)+加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作)-减法运算符*乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重复指定次数)/除法运算符,运算时结果总会返回一个浮点类型//整除,只会保留计算后的整数位,总会返回一个整型**幂运算,求一个值的几次幂%取模,求两个数相除的余数运算符算术运算符赋值运算符=可以将等号右侧的值赋值给等号左侧的变量几种特殊的赋值运算符:+=:a+=5相当于a=a+5-=:a-=5相当于a=a-5*=:a*=5相当于a=a*5**=:a**=5相当于a=a**5/=:a/=5相当于a=a/5//=:a//=5相当于a=a//5%=:a%=5相当于a=a%5关系运算符用来比较两个值之间的关系,结果返回一个布尔值。如果关系成立,返回True,否则返回False几种常见的关系运算符:>(<):比较左侧值是否大于(小于)右侧>=(<=):比较左侧值是否大于(小于)或等于右侧值==(!=):比较两个对象的值是否相等(不相等)相等和不等比较的是对象的值,而不是idIs(isnot):比较两个对象是否是(不是)同一个对象,比较的是对象的id运算符关系运算符运算符逻辑运算符逻辑运算符主要用来做一些逻辑判断

not逻辑非、and逻辑与(短路与)、or逻辑或(短路或)逻辑运算符可以连着使用result=1<2<3非布尔值的与或运算

当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值与运算的规则与运算是找False的,如果第一个值是False,则不看第二个值如果第一个值是False,则直接返回第一个值,否则返回第二个值或运算的规则或运算是找True的,如果第一个值是True,则不看第二个值如果第一个值是True,则直接返回第一个值,否则返回第二个值result=1and2#2 result=1and2#2result=1or0#1 result=0orNone#None运算符条件运算符(三元运算符)语法:语句1if条件表达式else语句2a=30b=50#获取a和b之间的较大值max=aifa>belseb运算符的优先级运算符的优先级可以根据优先级的表格来查询在表格中位置越靠下的运算符优先级越高,优先级越高的越优先计算如果优先级一样则自左向右计算在开发中如果遇到优先级不清楚的,则可以通过小括号来改变运算顺序练习练习1(逻辑运算符):尝试一下对布尔值进行三种逻辑运算尝试对非布尔值进行三种逻辑运算,并观察返回的结果练习2(条件运算符):现在有abc三个变量,三个变量中分别保存有三个数值,请通过条件运算符获取三个值中的最大值流程控制讲师:本讲目标条件判断语句循环语句条件判断语句-if语句if语句语法:if条件表达式:

代码块(一组代码)执行的流程:执行时,会先对条件表达式进行求值判断,如果为True,则执行if后的语句;如果为False,则不执行。默认情况下,if语句只会控制紧随其后的那条语句,如果希望if可以控制多条语句,则可以在if后跟一个代码块。条件判断语句:if语句示例代码可以使用逻辑运算符来连接多个条件,如果希望所有条件同时满足,则需要使用and,如果希望只要有一个条件满足即可,则需要使用or。方式一: ifnum>10andnum<20: print('num比10大,num比20小!')方式二: if10<num<20: print('num比10大,num比20小!')input函数该函数用来获取用户的输入input()调用后,程序会等待用户输入,用户输入完内容以后,点击回车程序才会继续向下执行,用户输入完成以后,其所输入的的内容会以返回值的形式返回。input()也可以用于暂时阻止程序结束。注意:input()的返回值是一个字符串,input()函数中可以设置一个字符串作为参数,这个字符串将会作为提示文字显示例如:a=input('请输入任意内容:’)print('用户输入的内容是:',a)条件判断语句:if-elseIf-else语句语法:if条件表达式:

代码块 else:

代码块执行的流程:执行时,先对if后的条件表达式进行求值判断,如果为True,则执行if后的代码块,如果为False,则执行else后的代码块条件判断语句:if-else示例代码age=7ifage>17: print('你已经成年了~~’)else: print('你还未成年~~')条件判断语句:if-elif-elseIf-elif-else语句语法:if条件表达式:

代码块 elif条件表达式:

代码块 elif条件表达式:

代码块 else:

代码块执行的流程:执行时,会自上向下依次对条件表达式进行求值判断,如果表达式的结果为True,则执行当前代码块,然后语句结束;如果表达式的结果为False,则继续向下判断,直到找到True为止如果所有的表达式都是False,则执行else后的代码块条件判断语句:if-elif-else示例代码age=210ifage>200:print('活着可真没劲呢!')elifage>=60:print('你已经退休了!')elifage>=30:print('你已经是中年了!')elifage>=18:print('你已经成年了!')else:print('你还是个小孩!')练习练习1(if语句):在命令行让用户输入一个用户名,获取用户输入,并进行判断,如果用户输入的用户名是admin,则显示欢迎管理员光临;如果用户输入的是其他的用户名,则什么也不做练习2(if-else语句):在命令行让用户输入一个用户名,获取用户输入,并进行判断,如果用户输入的用户名是admin,则显示欢迎管理员光临;如果用户输入的是其他的用户名,则显示欢迎普通用户光临。练习3:编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数练习练习4:编写一个程序,检查任意一个年份(用户输入)是否是闰年,如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年。练习5:我家的狗5岁了,5岁的狗相当于多大年龄的人呢?狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。强化:让用户输入狗狗的年龄,如果用户输入负数,请显示一个提示信息;如果是正数,计算狗狗的年龄练习练习6:从键盘输入小明的期末成绩:-当成绩为100时,'奖励一辆BMW’-当成绩为[80-99]时,'奖励一台iphone’-当成绩为[60-79]时,'奖励一本参考书’-其他时,什么奖励也没有循环语句:while循环while循环语句语法:while条件表达式:

代码块 else:

代码块执行的流程:执行时,会先对while后的条件表达式进行求值判断,如果判断结果为True,则执行循环体(代码块)循环体执行完毕,继续对条件表达式进行求值判断,以此类推,直到判断结果为False,则循环终止。如果循环有对应的else,则执行else后的代码块循环语句:while循环循环的三个要件(表达式)初始化表达式:通过初始化表达式初始化一个变量条件表达式:条件表达式用来设置循环执行的条件更新表达式:修改初始化变量的值条件表达式恒为True的循环语句,称为死循环,它会一直运行,慎用!例如:whileTrue:

print('hello')循环语句:while循环示例代码#创建一个执行十次的循环i=0whilei<10:i+=1print(i,'hello')else:print('else中的代码块')循环语句循环嵌套#在控制台中打印如下图形*************************#创建一个循环来控制图形的高度#循环嵌套时,外层循环没执行一次,内存循环就要执行一圈i=0whilei<5:#创建一个内层循环来控制图形的宽度j=0whilej<5:print("*",end='')j+=1print()i+=1循环语句循环嵌套#在控制台中打印如下图形***************分析:*j<1i=0**j<2i=1***j<3i=2****j<4i=3*****j<5i=4代码:i=0whilei<5:j=0whilej<i+1:print("*",end='')j+=1print()i+=1循环语句break用来立即退出循环语句(包括else)创建一个5次的循环i=0whilei<5:ifi==3:breakprint(i)i+=1else:print('循环结束')循环语句continue用来跳过当次循环i=0whilei<5:i+=1ifi==2:continueprint(i)else:print('循环结束')注意:break和continue都是只对离他最近的循环起作用循环语句pass是用来在判断或循环语句中占位的,没有任何实际意义例如:i=0ifi<5:pass练习练习1(while循环):求100以内所有的奇数之和练习2(while循环):求100以内所有7的倍数之和,以及个数。练习3(while循环):水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身(例如:1**3+5**3+3**3=153)。求1000以内所有的水仙花数练习练习4(while循环):获取用户输入的任意数,判断其是否是质数。质数是只能被1和它自身整除的数,1不是质数也不是合数练习5(循环嵌套):打印99乘法表

1*1=11*2=22*2=41*3=32*3=63*3=9...9*9=81练习6(循环嵌套):求100以内所有的质数。

for变量in序列:

代码块循环语句:for循环for循环语句语法说明for循环的代码块会执行多次,每执行一次就会将序列中的一个元素赋值给变量,所以可以通过变量来获取列表中的元素循环语句:for循环示例代码#创建一个序列fruits=['banana','apple','mango']#遍历序列forsinfruits:print(s)序列讲师:本讲目标列表及列表的使用序列及序列的分类序列的使用可变对象字典集合列表概念列表是Python中的一个对象列表中可以保存多个有序的数据。列表是用来存储对象的对象,列表中存储的数据,

称之为元素

使用列表中的对象都会按照插入的顺序存储到列表中,第一个插入的对象保存到第一个位置,第二个保存到第二个位置,我们可以通过索引(index)来获取列表中的元素列表创建列表1)通过[]来创建列表my_list=[]#创建了一个空列表4)列表中可以保存任意的对象my_list=[10,'hello',True,None,[1,2,3],print]2)一个列表中可以存储多个元素,也可以在创建列表时,来指定列表中的元素my_list=[10]#创建一个只包含一个元素的列表

3)当向列表中添加多个元素时,多个元素间使用,隔开#如下创建了一个包含有5个元素的列表my_list=[10,20,30,40,50]索引概念索引是元素在列表中的位置索引是从0开始的整数,列表第一个位置索引为0,第二个位置索引为1,第三个位置索引为2,以此类推……列表的索引可以是负数。如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个,以此类推……列表[索引]语法索引示例代码#创建一个列表my_list=[10,20,30,40,50]#通过索引获取列表中的元素print(my_list[4])#如果使用的索引超过了最大的范围,会抛出异常#print(my_list[5])IndexError:listindexoutofrange#使用负数索引#print(stus[-2])切片概念切片指从现有列表中,获取一个子列表。做切片操作时,总会返回一个新的列表,不会影响原来的列表。起始和结束位置的索引都可以省略不写语法列表[起始:结束:步长]通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素。步长表示,每次获取元素的间隔,默认值是1切片示例代码#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']#如果省略结束位置,则会一直截取到最后#print(stus[1:])#如果省略起始位置,则会从第一个元素开始截取#print(stus[:3])#如果起始位置和结束位置全部省略,则相当于创建了一个列表的副本#print(stus[:])#步长不能是0,但是可以是负数,如果是0会抛出异常#print(stus[::0])ValueError:slicestepcannotbezero#如果是负数,则会从列表的后部向前边取元素print(stus[::-1])函数函数方法说明+将两个列表拼接为一个列表*将列表重复指定的次数in检查指定元素是否存在于列表中。如果存在,返回True,否则返回Falsenotin检查指定元素是否步骤列表中。如果不在,返回True,否则返回Falselen()获取列表的长度,列表中元素的个数。获取到的长度的值,是列表的最大索引+1min()获取列表中的最小值max()获取列表中的最大值方法概念列表方法和函数基本上是一样,只不过方法必须通过【对象.方法()】的形式调用语法xxx.method()对象.方法名()方法实际上是和对象关系紧密的函数方法index()方法获取指定元素在列表中的第一次出现时索引示例代码#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','白骨精','沙和尚','沙和尚']#检查stus列表中有没有“沙和尚”print(stus.index('沙和尚'))#如果要获取列表中没有的元素,会抛出异常#print(stus.index('牛魔王'))ValueError:'牛魔王'isnotinlist#index()的第二个参数,表示查找的起始位置,第三个参数,表示查找的结束位置,包括开始,不包括结束。print(stus.index('沙和尚',3,7))方法count()方法统计指定元素在列表中出现的次数示例代码print(stus.count('牛魔王'))结果为0print(stus.count('沙和尚'))结果为3练习练习1:创建一个列表,在列表中保存你最好的5个朋友的名字,然后分别通过索引来获取每一个朋友的名字序列概念序列(sequence)是Python中最基本的一种数据结构。数据结构指计算机中数据存储的方式,序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)。序列中的数据会按照添加的顺序来分配索引分类可变序列(序列中的元素可以改变)列表(list)不可变序列(序列中的元素不能改变)字符串(str)元组(tuple)序列修改序列#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']1、通过索引直接修改stus[0]='sunwukong'修改后:['sunwukong','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']2、通过del索引删除#删除索引为2的元素delstus[2]修改后:['孙悟空','猪八戒','唐僧','蜘蛛精','白骨精']序列修改序列#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精’]3、通过切片来修改列表1)在给切片进行赋值时,只能使用序列进行赋值。#使用新的元素替换旧元素stus[0:2]=['牛魔王','红孩儿']修改后:['牛魔王','红孩儿','沙和尚','唐僧','蜘蛛精','白骨精’]#如果新元素的个数比旧元素多,会依次排列stus[0:2]=['牛魔王','红孩儿','二郎神']修改后:['牛魔王','红孩儿','二郎神','沙和尚','唐僧','蜘蛛精','白骨精']序列修改序列#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精’]3、通过切片来修改列表#使用新的元素替换旧元素stus[::2]=['牛魔王','红孩儿','二郎神']修改后:['牛魔王','猪八戒','红孩儿','唐僧','二郎神','白骨精’]#向索引为0的位置插入元素stus[0:0]=['牛魔王']修改后:['牛魔王','孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精']序列修改序列#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精’]通过切片删除元素#通过切片直接删除(方式一)delstus[0:2]修改后:['沙和尚','唐僧','蜘蛛精','白骨精']#通过切片直接删除(方式二)stus[1:3]=[]修改后:['孙悟空','唐僧','蜘蛛精','白骨精']序列修改序列#创建一个列表stus=['孙悟空','猪八戒','沙和尚','唐僧','蜘蛛精','白骨精’]通过切片步长删除元素delstus[::2]修改后:['猪八戒','唐僧','白骨精']以下操作,只适用于可变序列,如果是不可变序列,无法通过索引来修改。可以通过list()函数将其他的序列转换为list。例如:s='hello’s=list(s)print(s)序列的方法(只对可变序列使用)方法名称方法说明append()向列表的最后添加一个元素insert()向列表的指定位置插入一个元素参数:1.要插入的位置2.要插入的元素extend()使用新的序列来扩展当前序列,需要一个序列作为参数,它会将该序列中的元素添加到当前列表中clear()清空序列pop()根据索引删除并返回被删除的元素remove()删除指定值的元素,如果相同值的元素有多个,只会删除第一个,没有返回值reverse()用来反转列表sort()用来对列表中的元素进行排序,默认是升序

排列(从小到大排序)遍历for循环遍历普通遍历方式while循环遍历forsinstus:print(s)#定义变量i=0whilei<len(stus):print(stus[i])i+=1print(stus[0])print(stus[1])print(stus[2])print(stus[3])EMS员工管理系统练习1)查询显示当前系统当中的所有员工4)退出退出系统2)添加将员工添加到当前系统中3)删除将员工从系统当中删除思考:员工信息要保存到哪里?-列表,在系统中应该有一个列表,专门用来保存所有员工信息range()函数概念用来生成一个自然数的序列三个参数1.起始位置(可以省略,默认是0)2.结束位置3.步长(可以省略,默认是1)使用通过range()可以创建一个执行指定次数的for循环例如:foriinrange(30)元组概念元组(tuple)是一个不可变(数据不改变)的序列创建元组#使用()来创建空元组my_tuple=()#创建了一个5个元素的元组my_tuple=(1,2,3,4,5)#当元组不是空元组时,括号可以省略my_tuple=10,20,30,40#如果元组不是空元组,它里边至少要有一个“,”my_tuple=40,元组元组的解包将元组当中每一个元素都赋值给一个变量例如:a,b,c,d=my_tuple#通过解包交换两个数的值a=100b=300a,b=b,a#在对元组解包时,变量的数量必须和元组中的元素的数量一致#如果数量不一致,可以在变量前边添加一个*,这样变量将会获取元组中所有剩余的元素,并且以列表的方式返回。不能同时出现两个或以上的*变量。a,b,*c=my_tuplea,*b,c=my_tuple*a,b,c=my_tuple可变对象对象存储内容:每个对象中都保存了三个数据:

id(标识,地址)type(类型)value(值)改对象:a[0]=10(改对象)这个操作是在通过变量去修改对象的值,这种操作不会改变变量所指向的对象。当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现改变量:a=[4,5,6](改变量)这个操作是在给变量重新赋值,这种操作会改变变量所指向的对象。为一个变量重新赋值时,不会影响其他的变量。0说明:一般只有在为变量赋值时才是修改变量,其余的都是修改对字典语法创建字典1、创建一个空字典d={}2、使用dict()函数来创建字典每一个参数都是一个键值对,参数名就是键,参数值就是值(这种方式创建的字典,key都是字符串)d=dict(name='孙悟空',age=18,gender='男'){k1:v1,k2:v2,k3:v3}字典语法创建字典3、也可以将一个包含有双值子序列的序列转换为字典-双值序列,序列中只有两个值。例如:[1,2]('a',3)'ab'-子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列。例如:[(1,2),(3,5)]d=dict([('name','孙悟饭'),('age',18),('sex',’男’)]){k1:v1,k2:v2,k3:v3}字典获取字典值1.根据键来获取值语法:d[key]代码示例:print(d['age'])2.get()函数获取值语法:get(key[,default])代码示例:print(d.get('name'))注意:如果键不存在,会抛出异常KeyError。注意:如果获取的键在字典中不存在,会返回None,也可以指定一个默认值来作为第二个参数,这样获取不到值时将会返回默认值。字典修改字典1.d[key]=value说明:如果key存在则覆盖,不存在则添加2.setdefault(key[,default])

说明:

可以用来向字典中添加key-value。如果key已经存在于字典中,则返回key对应的value值,

不会对字典做任何操作;如果key不存在,则向字典中添加这个key,设置value值,并且返回key对应的value值。字典修改字典3.update([other])说明:

将其他的字典中的key-value添加到当前字典中,如果有重复的key,则后边的会替换到当前的4.copy()说明:该方法用于对字典进行浅复制,复制以后的对象,和原对象是独立的,修改一个不会影响另一个。注意,浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制字典删除字典1.del字典名[key]说明:通过键进行删除。如果删除的key值不存在,会抛出异常2.popitem()说明:随机删除字典中的一个键值对,删除之后,它会将删除的key-value作为返回值返回。返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value。当使用popitem()删除一个空字典时,会抛出异常KeyError:'popitem():dictionaryisempty'字典删除字典3.pop(key[,default])说明:

根据key删除字典中的key-value,并且将被删除的value返回。如果删除不存在的key,会抛出异常。如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值4.clear()说明:用来清空字典字典遍历字典1.keys()说明:该方法会返回字典的所有的key。并且会返回一个序列,序列中保存有字典的所有的键2.values()说明:该方法会返回一个序列,序列中保存有字典的左右的值3.items()说明:该方法会返回字典中所有的项。它会返回一个序列,序列中包含有双值子序列,

双值分别是,字典中的key和value字典中的常用函数方法名称方法说明len()获取字典中键值对的个数in检查字典中是否包含指定的键notin检查字典中是否不包含指定的键集合定义集合和列表非常相似不同点:1.集合中只能存储不可变对象。2.集合中存储的对象是无序(不是按照元素的插入顺序保存)3.集合中不能出现重复的元素,重复的元素会自动去除常用方法方法名称方法说明set()创建集合len()获取集合中元素的数量in/notin判断值是否存在add()向集合中添加元素,没有返回值update()将一个集合中的元素添加到当前集合中remove()删除集合中的指定元素,没有返回值clear()清空集合copy()对集合进行浅复制集合的运算运算方法说明&交集运算|并集运算-差集^异或集<=检查一个集合是否是另一个集合的子集<检查一个集合是否是另一个集合的真子集>=检查一个集合是否是另一个的超集>检查一个集合是否是另一个的真超集函数讲师:本讲目标函数简介函数参数函数式编程函数简介函数也是一个对象对象是内容中专门用来存储数据的一块区域函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用创建函数

函数名命名规范可以包含字母、数字、下划线、但是不能以数字开头

def函数名([形参1,形参2,...形参n]):代码块调用函数函数对象()函数中保存的代码不会立即执行,需要调用函数代码才会执行

案例定义函数#定义一个函数deffn():print('这是我的第一个函数!')print('hello')#调用函数fn()函数参数在定义函数时,可以在函数名后的()中定义数量不等的形参,多个形参之间使用,隔开形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数)

如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,

实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参案例带参函数#定义函数时指定形参deffn(a,b): print(a,"+",b,"=",a+b)#调用函数fn(10,20)案例带参函数-带默认值#定义一个函数#定义形参时,可以为形参指定默认值#指定了默认值以后,如果用户传递了参数则默认值没有任何作用#如果用户没有传递,则默认值就会生效deffn(a=5,b=10,c=20):print('a=',a)print('b=',b)print('c=',c)实参的传递方式-按位置传参#实参的传递方式#位置参数#位置参数就是将对应位置的实参复制给对应位置的形参#第一个实参赋值给第一个形参,第二个实参赋值给第二个形参。。。fn(1,2,3)实参的传递方式-按名称传参#关键字参数#关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数fn(b=1,c=2,a=3)#位置参数和关键字参数可以混合使用#混合使用关键字和位置参数时,必须将位置参数写到前面fn(1,c=30)函数的参数类型deffn(a):print('a=',a)#函数在调用时,解析器不会检查实参的类型#实参可以传递任意类型的对象b=123b=Trueb='hello'b=Noneb=[1,2,3]fn(b)函数的参数deffn(a):#在函数中对形参进行重新赋值,不会影响其他的变量

#a=20#a是一个列表,尝试修改列表中的元素

#如果形参执行的是一个对象,当我们通过形参去修改对象时

#会影响到所有指向该对象的变量

a[0]=30print('a=',a,id(a))c=10c=[1,2,3]#fn(c)#fn(c.copy())#print('c=',c,id(c))练习-练习1:定义一个函数,可以用来求任意三个数的乘积-练习2:定义一个函数,可以根据不同的用户名显示不同的欢迎信息

函数式编程

在Python中,函数是一等对象一等对象一般都会具有如下特点:

①对象是在运行时创建的②能赋值给变量或作为数据结构中的元素③能作为参数传递④能作为返回值返回

高阶函数高阶函数至少要符合以下两个特点中的一个①接收一个或多个函数作为参数②将函数作为返回值返回装饰器函数的参数-不定长参数一#在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参#它将会将所有的实参保存到一个元组中#*形参只能接收位置参数,而不能接收关键字参数deffn(*a):print("a=",a,type(a))#定义一个函数,可以求任意个数字的和defsum(*nums):#定义一个变量,来保存结果

result=0#遍历元组,并将元组中的数进行累加

forninnums:result+=nprint(result)函数的参数-不定长参数二#带星号的形参只能有一个#带星号的参数,可以和其他参数配合使用#第一个参数给a,第二个参数给b,剩下的都保存到c的元组中deffn(a,b,*c):print('a=',a)print('b=',b)print('c=',c)fn(1,2,3,4,5)函数的参数-不定长参数三#可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递#第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数deffn(a,*b,c):print('a=',a)print('b=',b)print('c=',c)#所有的位置参数都给a,b和c必须使用关键字参数deffn2(*a,b,c):print('a=',a)print('b=',b)print('c=',c)函数的参数-不定长参数四#如果在形参的开头直接定一个*,则要求所有的参数必须以参数名称的形式传递deffn(*,a,b,c): print('a=',a) print('b=',b) print('c=',c)fn(a=30,b=40,c=50)函数的参数-不定长参数**#**形参可以接受其他关键字参数,会将参数保存到一个字典中#字典的key就是参数的名字,字典的value就是参数的值#**只能有一个,并且必须写到参数的最后deffn(b,c,**a): print('a=',a,type(a)) print('b=',b) print('c=',c)fn(10,20,d=1,e=2)#按位置fn(a=1,d=2,e=3,b=10,c=20)#按名称参数的解包#参数的解包(拆包)deffn(a,b,c): print('a=',a) print('b=',b) print('c=',c)#创建一个元组或集合作为参数t=(10,20,30)t={1,2,3}#传递实参数,序列类型的参数前加*,这样序列中的元素依次作为参数传递#这里要求序列中的元素个数必须和形参个数一致#fn(*t)#普通传递#fn((1,2,3),10,20)#创建字典作为参数d={'a':100,'b':200,'c':300}#fn(**d)函数的返回值#函数返回值returndeffn(*nums): result=0 forninnums: result+=n print(result)#fn(100,200,300)#如果函数中写多个return,只会执行第一个return,后面代码不执行deffn(): #return'Hello' #return'dd' return[1,2,3]文档字符串#help()是python中的内置函数#通过help()函数可以查询Python中的函数用法#语法help(函数对象)如help(print)#help(print)deffn(a:int,b:bool,c:str='hello')->int: '''

这是函数说明

''' return10

help(fn)作用域#在Python中一共有两种作用域# 全局作用域# -全局作用域在程序执行时创建,在程序执行结束时销毁# -所有函数以外的区域都是全局作用域# -在全局作用域中定义的变量,都属于全局变量,可以在程序的任意位置访问## 函数作用域# -函数作用域在函数调用时创建,在调用结束时销毁# -函数每调用一次就会产生一个新的函数作用域# -在函数作用域中定义的变量,都是局部变量,只能在函数内部访问## 变量的查找# -使用变量时,会优先在当前作用域中查找,如果没有,再上一级作用域中查找案例作用域#函数内部定义新的函数deffn2(): deffn3(): print('fn3中:','a=',a) fn3()#a=20#fn2()#执行结果a=20deffn3(): a=10 #局部变量

print('fn3函数内部:','a=',a)deffn4(): globala#表示当前变量为使用定义好的全局变量

a=50 #此时相当于修改全局变量

print('fn4','a=',a)fn4()命名空间#命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间中#每个作用域都会有一个它对应的命名空间#全局命名空间,用来保存全局变量,函数命名空间用来保存函数中的变量#命名空间实际上就是一个字典,是一个专门用来存储变量的字典#locals()用来获取当前作用域中命名空间#返回的是字典scope=locals()#print(scope,type(scope))deffn(): a=10 scope=locals() global_scope=globals() global_scope['a']=30 print(scope) print(globals())fn()递归#创建一个函数,用来求任意数的阶乘#普通函数使用循环实现,编写简单,阅读稍难deffn(n): '''

该函数用来求任意数的阶乘 参数: n要求阶乘的数字

''' result=n foriinrange(1,n): result*=i returnresult#n=fn(3)#print(n)递归#创建一个函数,用来求任意数的阶乘#递归函数编写难,阅读方便#递归式函数的两个要件# 1.基线条件# -问题可以被分解为的最小问题,当满足基线条件时,递归就不再执行了# 2.递归条件# -问题可以继续分解的条件deffn(n): ifn==1: return1 returnn*fn(n-1)#print(fn(3))递归案例回文数defhui_wen(s): iflen(s)<2: returnTrue elifs[0]!=s[-1]: returnFalse returns[0]==s[-1]andhui_wen(s[1:-1])print(hui_wen('12321'))高阶函数#高阶函数#接收函数作为参数,或者将函数作为返回值的函数是高阶函数#当我们使用一个函数作为参数时实际上是将指定的代码传递进了目标函数高阶函数案例#需求取出列表中所有的偶数并返回#定义一个函数,判断一个任意的数字是否是偶数deffn2(i): ifi%2==0: returnTrue returnFalsedeffn(fnc,lst): new_list=[] forninlst: iffnc(n): new_list.append(n) returnnew_list #print(fn(fn2,l))闭包#闭包#将函数作为返回值返回,也是一种高阶函数(了解)#这种高阶函数也称为闭包,通过闭包可以创建一些当前函数能访问的变量#可以将一些私有的数据藏到闭包中deffn(): a=10 definner(): print('a=',a) print('我是内部函数') returninner#r是一个函数,是调用fn()后返回的函数#这个函数是在fn()内部定义,并不是全局函数#所以这个函数总是能访问到fn()函数内的变量#r=fn();#r();闭包#闭包使用案例#形成闭包的条件#1.函数嵌套#2.将内部函数作为返回值#3.内部函数必须要使用到外部函数的变量闭包案例-求多个数的平均值defmake_average(): nums=[] defaverage(n): nums.append(n) returnsum(nums)/len(nums) returnaverage#返回函数#make_average()函数返回的是内部函数#调用函数时,相当于调用的是内部函数average=make_average();#下面每次调用average(),都会给nums列表中增加数字,并求平均值#同时,列表nums不会被外部访问到#print(average(10))#print(average(20))#15装饰器defbegin_end(old): '''

用来对其他函数进行扩展,使其他函数可以在执行前开始打印,执行后打印结束 参数:

old要扩展的函数对象

''' defnew_function(*args,**kwargs): print('开始执行..') result=old(*args,**kwargs) print('执行结束..') returnresult returnnew_function #返回新函数装饰器-使用@begin_end #这种方式在实际中常用defsay_hello(): print('大家好')say_hello()对象讲师:本讲目标类和对象封装继承多态模块什么是对象?对象是内存中专门用来存储数据的一块区域。对象中可以存放各种数据(比如:数字、布尔值、代码)对象由三部分组成:1.对象的标识(id)2.对象的类型(type)3.对象的值(value)oopPython是一门面向对象的编程语言所谓的面向对象的语言:简单理解就是语言中的所有操作都是通过对象来进行的容易阅读,并且比较易于维护,容易复用

温馨提示

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

最新文档

评论

0/150

提交评论