《Python编程入门与进阶》高职全套教学课件_第1页
《Python编程入门与进阶》高职全套教学课件_第2页
《Python编程入门与进阶》高职全套教学课件_第3页
《Python编程入门与进阶》高职全套教学课件_第4页
《Python编程入门与进阶》高职全套教学课件_第5页
已阅读5页,还剩336页未读 继续免费阅读

下载本文档

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

文档简介

Python编程入门与进阶第1章Python简介第2章Python基础语法第3章

基本语句第4章

函数第5章

数据结构第6章

模块第7章PythonIO第8章

面向对象第9章

异常第10章Python中的库、包和模块第11章Python数据库存储第12章Python网络编程第13章Python网络爬虫第14章PythonGUI编程第15章PythonCGIWEB编程全套可编辑PPT课件

Python编程入门与进阶第一章Python简介目录:Python概述搭建Python开发环境第一个Python程序Python代码编写规范综合案例分析总结为什么学编程?为什么是Python?TIOBE排行榜Python的特点Python的应用方向搭建Python开发环境Python官网:Python文档:在内置的IDLE环境中编写程序使用集成开发环境PyCharm编写程序PyCharm官网:/pycharm注释规则:单行注释:以“#”开头,直到该物理行结束。注释可以在行开头,或空白符与代码之后,但不能在字符串里面。多行注释:Python中使用三个单引号或三个双引号表示多行注释。中文编码声明注释:为了方便他人了解代码文件所使用的编码,建议在文件开头位置加上中文编码声明注释。Python代码编写规范#请使用Python输出“HelloWorld!”>>>print("HelloWorld!")或>>>print("HelloWorld!")#请使用Python输出“HelloWorld!”单行注释:'''文件名:hello.py用途:用于输出"HelloWorld!"创建日期:2022年3月1日创建人:LXX'''或"""文件名:hello.py用途:用于输出"HelloWorld!"创建日期:2022年3月1日创建人:LXX"""#-*-coding:utf-8-*-或#coding=utf-8多行注释:中文编码声明注释代码缩进:Python采用代码缩进和冒号来区分代码之间的层次缩进可以使用空格或者Tab键来实现常用的集成式开发环境(比如IDLE、PyCharm、Eclipse等)都具有自动缩进的机制Python代码编写规范Python代码编写规范命名规范:模块名尽量短小,并且全部使用小写字母,可以使用下划线分隔多个字母。包名尽量短小,并且全部使用小写字母,不推荐使用下划线。类名采用单词首字母大写形式(CamelCase驼峰命名)。模块内部的类采用下划线“_”与类名相结合。函数、类的属性和方法的命名规则同模块类似,也是全部采用小写字母,多个字母间用下划线“_”分隔。常量命名时全部采用大写字母,可以使用下划线“_”。使用单下划线“_”开头的模块变量或者函数是受保护的,在使用import*from语句从模块中导入时这些变量或者函数不能被导入。使用双下划线“_”开头的实例变量或方法是类私有的。综合案例分析:使用Python的内置函数print()实现在IDLE中编写学生信息管理系统的功能菜单。总结:Python具备简单易学、面向对象、可移植性强、功能强大等特点,是目前最受欢迎的编程语言之一。Python广泛应用在网络爬虫、数据分析、人工智能、Web开发、自动化运维、云计算、网络编程、游戏开发等领域。请根据您的系统版本到官方网站下载Python相应版本,集成开发环境功能齐全,使用方便。Python代码编写注意注释规则、代码缩进、命名规范等,养成良好的编程习惯。Python编程入门与进阶第二章Python基础语法163目录:案例导入关键字与标识符常量与变量基本数据类型基本输入和输出运算符综合案例分析

总结案例导入:已知一个圆的半径,通过Python编程计算圆的面积。代码及运行结果:案例解读:定义变量pi的值为3.14定义变量r,存储圆的半径通过Python提供的input()内置函数输入圆的半径使用数据类型转换函数float()将输入的半径值转换为浮点型使用算术运算符计算圆的面积area通过Python提供的print()内置函数输出计算结果pi=3.14#定义圆周率r=input("请输入圆的半径:")#输入半径的值r=float(r)#将输入的半径值转换为浮点型area=pi*r*r#使用公式计算圆的面积print(area)#输出圆的面积计算结果关键字:即保留字,是Python中已经被赋予特定意义的一些单词,不能用作常数、变数或任何其他标识符名称。>>>importkeyword>>>keyword.kwlist['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']标识符:标识符是用来区分每个对象的对象名称由用户定义,主要用来给变量、函数、类,模块等命名。标识符由字母、数字、下划线组成,但不能以数字开头。标识符区分大小写,如Abc、abc、ABc是不同的标识符。标识符不能是Python的关键字。Python标识符的长度没有限制,标识符不易过长,过长书写不方便,阅读也困难。常量:常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变。Python常量包括:数字、字符串、布尔值、空值,一般所有字母大写。>>>PI=3.141592653>>>print(PI)3.141592653变量:变量的值是可以动态变化的。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。Python中变量的命名规则如下:变量名必须是一个有效的标识符变量名不能是Python的保留字或关键字应选择有意义的单词作为变量名#创建变量number并赋值365,该变量为数字类型>>>number=365#创建变量name并赋值John,该变量为字符串类型>>>name=“John”等号(=)用来给变量赋值等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。Python数据类型Python数据类型转换input()函数:用来获取用户的键盘输入>>>x=input("提示文字")print()函数:用来打印输出>>>age=input("请输入您的年龄:")请输入您的年龄:30>>>print(type(age))<class'str'>#将输入的字符串类型转换成整型>>>age=int(input("请输入您的年龄:"))请输入您的年龄:30>>>print(type(age))<class'int'>示例代码:>>>print(输出内容)示例代码:>>>print(1)1>>>a=1>>>b='runoob'>>>print(a,b)1runoob

>>>print("aaa""bbb")aaabbb>>>print("aaa","bbb")aaabbb

>>>print("www","runoob","com",sep=".")#设置间隔符Python运算符Python算术运算符Python比较运算符Python赋值运算符Python逻辑运算符Python位运算符Python成员运算符Python身份运算符Python运算符优先级综合案例分析:计算身体质量指数BMI的值,身高保留2位小数,体重保留2位小数,计算结果BMI值保留1位小数。结果:总结:熟悉Python中的关键字,熟记Python中的标识符命名规则,以便编程中能快速准确的定义变量名。理解变量的概念,虽然可以使用中文字符作为变量名,但是在实际编程中不建议使用中文变量名。Python是面向对象的编程语言,即一切皆为对象,所以数据类型的Python实现都是类:数字类、字符串类、列表类、元组类、集合类、字典类,理解数据类型的概念,熟悉数据类型的基本操作,掌握数据类型的属性和方法,为今后的学习奠定良好的基础。Python内置了2个函数:input()函数进行数据输入,print()函数实现数据输出。运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等。Python编程入门与进阶第三章基础语言目录:案例导入...........................................知识复习...........................................条件语句...............................循环语句...............................综合案例分析......................总结............................................案例导入:约瑟夫生死游戏运行结果:代码:问题描述:30个人在一条船上,超载,需要15人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从1开始,数到9的人下船。如此循环,直到船上仅剩15人为止,问都有哪些编号的人下船了呢?代码分析:图例:用check记数,check=3时将对应编号i的人置0(扔下船)并让check重新记数,两个循环语句来多次执行一个操作,for循环判断人员是否在船上,while循环判断是否要下船。基本语句结构:顺序结构、选择结构、循环结构流程图条件语句:if语句的逻辑结果:如果逻辑条件为真,则执行缩进语句。如果逻辑条件为假,则跳过缩进语句。number=int(input("Enteranumber:"))ifnumber>0:print(‘Thenumberispositive’)Enteranumber:23Thenumberispositive条件语句:if-else的逻辑结果:条件判断为真或假,因此将执行其中一个选项。number=int(input("Enteranumber:"))

ifnumber>0:

print("Thenumberispositive")

else:

print("Thenumberisnegative")Enteranumber:-3Thenumberisnegative条件判断奇偶数:条件语句:if-elif的逻辑结果:有时有两种以上的可能性,我们需要两个以上的分支。第一个为假,则检查下一个,依此类推。如果其中之一为真,则执行相应的分支,语句结束。ifchoice=='a':print('Badguess')elifchoice=='b':

print('Goodguess')elifchoice=='c':

print('Close,butnotcorrect')条件语句:if-elif的逻辑结果:有时有两种以上的可能性,我们需要两个以上的分支。第一个为假,则检查下一个,依此类推。如果其中之一为真,则执行相应的分支,语句结束。ifchoice=='a':print('Badguess')elifchoice=='b':

print('Goodguess')elifchoice=='c':

print('Close,butnotcorrect')循环语句:while循环的逻辑执行步骤:1、评估条件,结果为True或False;2、如果条件为false,则退出该while语句并继续执行下一条语句;3、如果条件为true,则执行主体,然后返回步骤

1>>>a=1>>>whilea<10:

print('%d\t'%a)

a+=2输出奇数的循环:循环语句:break和continue结果:break

语句可以跳出的循环体。如果从循环中终止,任何对应的循环块将不执行。continue

语句跳过当前循环块中的剩余语句,然后继续进行下一轮循环。n

=

5

while

n

>

0:

n-=

1

if

n

==

2:

break

print(n)

print('循环结束。')4

3

循环结束。n

=

5

while

n

>

0:

n-=

1

if

n

==

2:

continue

print(n)

print('循环结束。')4

3

10循环结束。循环语句:for循环的逻辑结果:for循环通过一组已知的项目,构造一个明确次数的循环,不断迭代来进行遍历。>>>languages=["C","C++","Perl","Python"]>>>forxinlanguages:

...print(x)...CC++PerlPython构造求列表中最大值的for循环结果:在循环结束时,我们扫描了所有的值,变量largest现在确实包含列表中的最大值Range()结果:range()是一个内置类。range(start,stop[,step])范围对象逐步返回从开始到停止的数字序列forninrange(2,10):

forxinrange(2,n):

ifn%x==0:break

else:

print(n,'是质数')2是质数3是质数5是质数7是质数综合案例分析:A第一个将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。C、D、E依次也按同样的方法拿鱼。问他们至少捕了多少条鱼?总结:If语句是程序设计中来进行条件判断的,若条件成立则执行相应语句,否则执行另外的语句。if语句可以嵌套使用,实现多重条件判断。循环语句实现了重复的完成某些功能,根据条件判断,条件为真时重复执行代码块,为假则结束循环。While语句是实现循环的基本语句,在使用中要避免无限循环。Continue语句可以根据条件提前结束一轮循环;break语句可以根据条件提前结束循环。For语句的循环更多时候用遍历的次数作为循环次数,来重复执行代码块。Python编程入门与进阶第四章函数目录:案例导入...........................................内置函数...............................新建和调用函数...............................参数.......................递归函数.......................全局变量和局部变量.......................匿名函数.......................综合案例分析......................总结............................................案例导入:斐波那契数列(Fibonaccisequence)代码及运行结果:问题描述:这样一个数列:0、1、1、2、3、5、8、13、21、34、……每一个数都是前两个数之和。以递归的方法定义:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2)(n>=2,n∈N*)代码分析:图例:定义了一个计算斐波那契数列的函数,调用该函数,我们可以计算出任何一个限定值的斐波那契数列,只要在调用函数时传入不同的参数就可以。与黄金分割的关系有趣的是,这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当

趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618(或者说后一项与前一项的比值小数部分越来越逼近0.618)。函数:在程序设计的范畴,函数是执行计算的命名语句序列。定义函数时,指定名称和语句序列。稍后,我们可以按名称调用该函数。例子:内置函数:Python提供了许多重要的内置函数,我们可以使用它们而无需提供函数定义。Python的创建者编写了一组函数来解决常见问题,并将它们包含在Python中供我们使用。数学函数:随机数函数:使程序真正具有不确定性,一些方法可以使其至少看起来具有不确定性。其中之一是使用生成伪随机数的算法。例子:Random模块:提供了生成伪随机数的函数random函数使用举例:Random:生成以下10个随机数的列表,这些随机数介于0.0和1.0之间。randint接受参数lowandhigh,并返回一个介于lowandhigh之间的整数Choice:从序列中随机选择一个元素,可以使用函数:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段示例代码:定义和调用函数:若干代码的执行逻辑完全相同,我们就可以考虑将这些代码抽象成一个函数,这样既可以提高代码的重用性,也使得条理变得更加清晰,可靠性更高。函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python命令提示符执行。示例代码:参数:在定义函数的时候,让函数接收数据,这就是函数的参数。用参数来接收传递给函数的值,这样就可以随着参数的值不同,每次计算的结果也会不同。形参和实参:传递值参数:参数:在定义函数的时候,让函数接收数据,这就是函数的参数。用参数来接收传递给函数的值,这样就可以随着参数的值不同,每次计算的结果也会不同。默认参数:在调用函数时,默认参数有没有值传入。如果默认参数有值传入,则将传入的新值替代默认值;如果默认参数无值传入,则直接使用默认的值。参数:在定义函数的时候,让函数接收数据,这就是函数的参数。用参数来接收传递给函数的值,这样就可以随着参数的值不同,每次计算的结果也会不同。不定长参数*args和**kwargs:一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。加了星号

*

的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号

**

的参数会以字典的形式导入。递归:一个函数在内部调用自身,这个函数就是递归函数。分析:fact(n)=n!=1*2*3*...*(n-1)*n=(n-1)!*n=fact(n-1)*n。所以,fact(n)可以表示为n*fact(n-1),只有n=1时需要特殊处理。常规定义:递归调用:用递归的方法来写阶乘就简单多了,函数自己调用自己,但是每次调用的参数都有变化。命名空间:命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。结果:

Python的查找顺序为:局部的命名空间去->全局命名空间->内置命名空间。三种命名空间:内置名称(built-innames),Python语言内置的名称,比如函数名abs、char和异常名称BaseException、Exception等等。全局名称(globalnames),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。局部名称(localnames),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)变量的作用域:作用域是一个Python程序可以直接访问命名空间的正文区域。结果:访问顺序:

L–>E–>G–>B。从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。四种作用域:L(Local):最内层,包含局部变量,比如一个函数/方法内部。E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类)A里面又包含了一个函数B,那么对于B中的名称来说A中的作用域就为nonlocal。G(Global):当前脚本的最外层,比如当前模块的全局变量。B(Built-in):包含了内建的变量/关键字等,最后被搜索。全局变量和局部变量:定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。结果:局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。global和nonlocal关键字:当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字匿名函数:使用

lambda

来创建函数,不再使用def语句这样标准的形式定义一个函数代码示例:语法:lambda[arg1[,arg2,.....argn]]:expression说明:lambda

只是一个表达式,函数体比

def

简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。匿名函数用作传递的实参:经典的大小比较函数用匿名函数实现:综合案例分析总结:创建新函数使您有机会命名一组语句,这使程序更易于阅读、理解和调试。函数可以通过消除重复代码来使程序更小。以后,如果对代码进行更改,则只需在一个地方进行。将一个长程序划分为函数可以一次调试一个部分,然后将它们组装成一个工作整体。精心设计的函数通常对许多程序有用。一旦编写和调试了一个,就可以重用它。Python编程入门与进阶第五章数据结构目录:案例导入...........................................列表...............................元组...............................集合.......................字典.......................总结............................................案例导入:Python中的数据类型什么是数据结构(或数据类型):一种组织和存储数据的方式,便于我们可以有效的访问和修改它代码分析:这里的数据结构(datastructures)表示数据的性质,有整数、小数、字符串等类型。python中,可以使用type()函数查看数据的类型。列表:Python列表可以看作是值的集合。Python列表是有序的、可更改的,它允许有重复的值。创建列表:创建python列表有两种方式:

1.使用[]创建列表

2.使用内置函数创建列表索引:访问列表:访问整个列表访问列表中的单个值3.迭代访问列表切片:当你只需要Python列表的一部分时,可以使用切片运算符[],切片的数据由索引定义。列表重分配:Python中的列表是可变的。这就意味着我们可以重新分配它的元素,包括重新分配单个元素、部分元素及全部元素。也可简单的理解为是对列表的增、删、改操作。列表重分配:Python中可以使用其内置函数对列表进行数据的新增及删除。新增数据的三个常用方法:appendinsertextend删除数据的四个常用方法:removepopdelclear列表的一些其他常规操作:列表的拼接列表的运算列表的常用内置函数:元组:python的元组是有序且不可被修改的数据集合,使用小括号()进行定义,元组内的元素之间使用逗号分隔。从形式上观察,除了用小括号()代替了中括号[],元组几乎与列表一样,但元组有自己独特的特性:元组一旦被创建就无法被修改,新增,删除,修改这些操作都无法在元组上进行。创建元组:访问元组:1.索引方式:获取元组里的值,方法与从列表里获取值一样,必须提供索引,通过[]索引访问的方式获得索引对应的值。2.for循环同样可以对元组进行遍历元组的切片:元组支持切片操作,与列表相同。元组的修改:元组是不可变对象,元组没有被修改,被修改的是列表里的元素。集合:python的集合是一个无序且没有重复元素的序列,集合中的元素必须是可hash对象。集合不记录元素位置和插入顺序,因此,也不支持索引,切片等其他序列类的操作。去除重复元素是集合的一项重要功能,此外还有成员检测,数学上集合类的计算,例如交集,并集,差集等操作。创建集合:定义集合可以使用{}或者set(),但定义空集合不能使用{},因为{}是创建空字典的方法,定义空集合可以使用set()。访问集合中的元素:由于集合不支持索引,因此无法像列表那样通过索引操作来获取元素,只能通过for循环遍历集合。集合的常用操作:s.add(element)s.update(seq)集合的常用操作:s.remove(element)s.discard(element)s.pop()集合的常用方法:字典:python的字典(dict)属于映射类型,是数据的无序集合,字典内的元素都是key:value形式的键值对,所有键值对存储在一对大花括号{}中,每一个键值对之间使用逗号分隔。如:{'name':'小明','age':14}字典的key不允许重复,如果向字典中插入重复的key,新的value会替换旧的value。创建字典:1.使用{}创建字典2.使用内置函数dict创建字典访问字典:任何时候,我们对字典里的元素的访问,修改,删除,都必须通过key来进行。想要获取某个特定的key所对应的value值,可以通过dict[key]这种语法来实现。遍历字典的key与value是常见的操作。修改字典:新增键值对。修改字典中的内容删除字典里的元素常用的字典方法:总结:

列表被创建后可以随意被修改,且元素类型可以不同,无长度限制。

元组与列表的主要不同在于:元组是不可变的,或者说是只读的,所以那些用于更新列表的操作,比如用切片操作来更新一部分元素的操作,就不能用于元组类型。

集合有两种不同的类型,可变集合(set)和不可变集合(frozenset)

字典是键值对的集合,键值对之间无序。Python编程入门与进阶第六章模块目录:案例导入模块的定义模块的导入自定义模块的创建自定义包常用的内置模块第三方模块综合案例分析总结案例导入:问题描述:现有一个Python文件名为“calculation”,里面定义了四个函数,可以实现两个整数的加减乘除运算,若要在另一个名为“demo_module”的文件中实现两个整数相加的功能,不需要单独编写指令,可以从calculation文件中调用,代码如下:calculation.pydemo_module.py运行结果:6.1模块的定义

在程序开发过程中,一个文件中的代码越多就越不容易维护,为了提高代码的可维护性,我们可以将程序中的函数分组放在不同的文件里,或者将同一功能相关的代码分配到一个文件里。这种以.py结尾的文件,在Python中就被称为一个模块(Module)。

模块是Python组织程序的重要方式,模块中能定义函数、方法和变量,模块里也能包含可执行的代码。Python中的模块分为系统模块、用户自定义模块和第三方模块。6.2模块的导入模块导入的语法如下:[from

模块名]import[模块

|类|变量|函数|*][as

别名]常用的组合形式有:import模块名from模块名import类、变量、方法等from模块名import*import模块名as别名from模块名import功能名as别名6.2模块的导入一、使用import语句导入模块使用import语句导入模块的语法如下:

使用import语句可以导入一个模块,也可以一次导入多个模块。导入多个模块时每个模块名之间需使用“,”分隔。导入模块中某个函数或方法时,需使用“模块名.函数名/方法名”的格式:例如,下面的程序中便导入了模块定义中的rectangle.py模块中的area()函数:二、使用from…import语句导入模块

使用import语句导入模块时,执行每一条import语句时,都会创建一个新的命名空间,并在该命名空间中执行与.py文件相关的所有语句。每次调用模块中的内容时,都需要添加模块名作为前缀。若不想创建新的命名空间,而是将具体的定义导入当前的命名空间中,减少导入时输入的代码量,可以使用from…import语句,具体用法如下:from模块import方法/类/对象from…import语句也可以一次导入多个方法、类或对象,只需“,”隔开即可。例如,已经定义了一个模块rectangle.py,在另外一个文件中利用from...import语句导入:代码如下:6.3自定义模块的创建

进行项目开发时,不会将所有代码都放在一个文件中,而是将耦合度较低的多个功能写入不同的文件中,制作成模块,并在其他文件中以导入模块的方式使用自定义模块中的内容。Python文件中的每个文件都可以作为一个模块存在,文件名即模块名。自定义模块的导入可以使用import语句和from...import语句。6.4自定义包一、包的概念一个.py文件就是一个模块,在开发过程中如果一个工程项目包含多个文件,或者有多个模块功能相近,为了便于管理和外部引用,我们可以将这些.py文件组织为一个整体存放在同一个文件夹下(打包),这样构成的文件夹以及内部的.py文件就称为包。包是一个分层次的文件目录结构,该目录中还包含了一些模块或子包。简单的包结构如下所示:其中,package_a是包的名称,module_a.py和module_b.py是其目录下的模块,package_a1是子包,module_a1.py是子包中的模块。包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件可用于包含多个模块文件,从逻辑上看,包的本质依然是模块。二、创建和使用包1.包的创建步骤方法一:在PyCharm项目文件上鼠标右键单击——>NEW——>Directory创建目录,如下图所示:方法二:在PyCharm项目文件上鼠标右键单击——>NEW——>PythonPackge创建包,如下图所示:二、包的使用包是模块的集合,我们如果要使用包或者包中某个模块的功能时,可以有以下几种导入方法:(1)import导入(2)from…import导入6.5常用的内置模块表6-1Python常用内置标准模块模块名功能sys包含了与Python解释器相关的属性和函数os提供了对文件和目录进行操作的标准库datetime提供与日期、时间相关的各种函数的标准库logging提供了配置日志信息的功能math提供了许多对浮点数的数学运算函数time提供与时间相关的各种函数的标准库random提供随机数功能的标准库1.sys模块(1)sys.version获取Python解释器的版本信息(2)sys.exit()退出当前程序2.os模块(1)os.makedirs()以递归的方式创建多层目录(2)os.removedirs()若指定目录为空,则删除指定目录,若此上级目录也为空,则一并删除上级目录,以此类推2.os模块(3)os.system()执行系统命令(4)os.path.split()将路径分隔为(目录,文件名)的二元组并返回3.random模块(1)random.random()参数为空,返回(0,1]之间的随机实数(2)random.randint(x,y)返回[x,y]之间的整数4.time模块(1)time.asctime()获取当前时间(2)time.localtime()以struct_time类型输出本地时间6.6第三方模块表6-2Python常用第三方库名称功能numpy用于科学计算和数据工作的工作基础包Scrapy网络爬虫工具常用的库,快速、高层次的Web获取框架djang通用的Web开发框架pillowPython图形库的分支pandasPython强大、灵活的数据分析和探索工具matplotlib数据可视化工具和作图库,是主要用于绘制数据图表的Python库requests处理HTTP请求pyQTPython的一个GUI(图形用户界面)工具Scapy数据包探测和分析库tensorflow人工智能学习系统Python第三方模块的使用和内置模块类似,但不同的是在使用之前需要下载并安装。下载和安装使用Python提供的pip命令实现,具体语法格式如下:pipinstall模块名表6-3Python常用pip命令的使用方法pip命令功能说明pipinstallSomePackage安装SomePackage模块piplist列出当前已经安装的所有模块pipinstall-upgradeSomePackage升级SomePackage模块pipuninstallSomePackage卸载SomePackage模块综合案例分析:计算两个日期之间相隔的天数从键盘输入两个日期,计算之间相隔的天数,通过导入内置模块time实现,具体代码如下:程序执行结果为:总结:模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。包是一组模块的集合,可以调用其他包、其他包内的模块。模块和包是Python组织程序的重要方式。模块可以使用import语句和from…import语句导入,from…import语句可简化方法的调用方式,但import语句在内容有重名情况时使用更为安全。Python中有大量的内置模块可以使用,用户也可依据开发需要安装第三方库及创建自己的模块和包。Python编程入门与进阶第七章PythonI/O案例导入现有一份记录了300人成绩的studentsgrades.csv文件,成绩由平时成绩、测试成绩、期中成绩、期末成绩构成。现需要计算出总成绩,总成绩=平时成绩*0.2+期中成绩*0.2+…期末成绩*0.4。现在需要编写Python程序,从文件中读取数据,根据规则计算出总成绩,生成一个新的结果文件并输出磁盘文件:studentgrades.csv磁盘文件result.csv读取文件数据存储、计算、排序结果输出到文件InputreadOutwrite程序案例解读csv文件(comma-separatedvalues)也称为字符分隔值,其文件以纯文本形式存储表格数据(数字和文本)每一行文本的末尾都有一个换行符,默认情况下在文本编辑器中不显示换行符。但可以通过编辑器的定义让其显示。换行符ASCII码用’\n’表示案例解读:数据结构为了生成结果文件,需在内存中构建合适的数据结构来存储处理后的数据。使用嵌套列表的数据结构存储结果文件[

[],[],[],[]

]最外层列表[]表示整个表格,代码:studenstData=[]内层列表[]作为外层列表[]的元素,

每个[]表示一行,代码:itemList内层列表中的元素,是从文件中读入一行字符串后,以分隔符为界,生成字符串列表。代码:

itemList=newLine.split(“,”),newLine为文件中读出的一行字符串,该字符串将最后的换行符去除。打开studentgrades.csv文件返回文本流对象inputFile从文本文件中读出一行案例解读:处理过程inputFile=open("studentgrades.csv",mode="r")itemList插入studenstData列表转换为列表itemList,并计算总成绩读取表头(第一行)headerLine=inputFile.readline()最后一行?完成studenstData列表构建,为后续处理做准备打开result.csv文件返回文本流对象outFile取出studenstData中的一个元素(行)案例解读:处理过程

outFile=open("resut.csv",mode="w")向结果文件写入一行字符串将表示行的列表对象,转换为使用逗号分隔的字符串line,行尾附上换行符”\n”写入表头(第一行)最后一行?

newHeadLine=headerLine.rstrip(“\n”)+“,”+“总成绩”+“\n”outFile.write(newHeadLine)是分别关闭文本流对象outFlie和inputFilePython程序从磁盘文件读入数据到内存中Open函数调用获得一个输入流读入数据readline输入流对象的遍历Python程序将内存中的数据写入磁盘文件Open函数调用,获得一个输出流对象写入数据:WritelinesList数据结构的使用---嵌套List表示表格案例解读:知识知识精讲I/O概念Python中的I/O流磁盘文件操作字符编码I/O概念-从计算机系统视角输入(input)与输出(Output)的首字母i和o的缩写I/O是外部设备(硬盘、网卡、键盘、显示器等)与内存之间进行数据交换的过程,主体是内存计算机系统的I/O是由操作系统来控制和协调的从程序的视角来看,I/O的主体是运行在内存中的应用程序,也称为进程。进程的I/O操作并不是实质的I/O过程,而是对操作系统I/O功能的一次触发,即I/O调用I/O概念-从程序的视角I/O流是对各种不同外围设备I/O操作的抽象,是程序与外部数据源交互的中间媒介。可以通过控制I/O流实现特定的读写过程的控制。不同的编程语言如:Python、Java、C等都提供了相关的函数、类来支持I/O流的功能。在开发中,我们可以通过调用相关函数或实例化相关的类来获得I/O流对象。I/O流概念按照I/O流的方向分为输入流和输出流。输入流:程序可以从输入流中读取数据输出流:程序可以像输出流中写数据按照I/O流的操作颗粒度分为字节流和字符流字节流:以字节为单元读/写,可操作任何类型数据(文本数据、二进制数据)字符流:以字符为单元,只能操作纯字符数据按照I/O流的功能分为节点流和处理流节点流:可以从/向一个特定的I/O设备(如磁盘,网络)读/写数据的流,也称低级流。处理流:用于通过封装后的流来实现数据的读/写功能,也称高级流,如具备一个已存在的流进行连接和封装功能的处理流,具备字符编码和解码功能的处理流等常见的I/O流的分类I/O流的读写控制为保证按顺序读/写,在流对象中会有一个指针,指向当前已读取或写入的数据单元的位置,如图所示。每读/写一次,指针就会移动到下一读、写单元处。同时,流对象中也提供了控制指针的方法和功能。注:为方便使用,通常会提供一些函数,以特定的字符/字节数量进行读写。如案例中使用readline或者writelines,以一行为单位进行读写,调用一次,指针执行下一行的位置。这些函数底层的实现还是基于一个数据单元的读写来实现的。在Python语言中提供了I/O流,共有三种类型的I/O流文本I/O流二进制I/O流(带有缓冲区功能)原始I/O流(没有缓冲区功能的二进制I/O流)Python的I/O流分类主要以操作颗粒度划分为主。文本I/O流其本质就是以字符为处理单元。具体I/O流对象的获取方式通过open函数调用,通过参数的定义,得到不同类型的I/O流对象fileObj=open(file,mode='r',buffering=-1,opener=None)函数返回值fileObj表示一个PythonI/O流对象,具体类型由mode、buffering参数决定。通过具体的I/O类,实例化对象得到I/O流对象。io.StringIO类实例化后得到一个文本流对象io.BytesIO类实例化后得到一个二进制流对象系统提供的sys.stdin、sys.stdout、sys.stderr对象Python中的I/O流—概览根据应用需要确定使用哪一种I/O流对象生成或取得I/O流对象通过I/O流对象的方法调用,实现对输入输出的控制。读操作写操作文件指针控制通过阅读API文档获取具体的使用方法PythonI/O流对象的使用原则用于读写磁盘中的文件。open(file,mode='r',buffering=-1,opener=None)当mode参数为“tr”、“tw”“tx”“ta”“t+”或“r”“w”“x”“a”“+”(t为默认,可以不标注)时,得到的是文本I/O流。mode参数不指定时,默认为“tr”模式file参数表示将要打开的文件的路径文本I/O流—文件IO流io.StringIO类提供了向内存中读写字符串的功能。类似于在内存中虚拟出一个文件,可以像操作磁盘文件一样操作内存中的字符串通过执行StringIO类的实例化方法,可获得文本I/O流,程序通过这个I/O流实现在内存中的字符串的读/写等操作实例化方法:io.StringIO(initial_value='',newline='\n’)initial_value:要操作的字符串序列newline:定义分割符,默认为换行符’\n’文本IO流--io.StringIOIo.StringIO的使用引入案例中,假设studentgrades.csv文件中的内容是通过网络获得,或其它非文件形式获得,那么可以文本内容赋值给data,并实例化io.StringIO。后续的代码无需修改依然能正常运行。这三个对象为进程创建时,系统分配给进程的三个文本流对象,每个进程都可以直接引用三个对象。sys.stdin对象称为标准输入流进程与键盘之间的管道,进程可以通过stdin对象读取键盘输入信息。input()方法,是基于sys.stdin.read()方法实现的。[从键盘读入字符串]sys.stdio为标准输出流进程与显示终端之间的管道,进程可以将信息写入流中,从而在显示终端上显示输出内容print()方法是通过调用sys.stdout.write()方法实现的sys.stderr标准错误流stderr和stdout一样,写入stderr流的信息也是在终端上显示,只不过是错误信息实际应用中,可以给这三个对象重新赋值,该值只要是文本流对象便可。这种方式称为输入重定向、输出重定向或错误输出重定向。用于改变默认的输入输出方式。文本流对象——sys.stdin、sys.stdout和sys.stderror输出重定向:将标准输出(终端)替换为一个名为out.log文件,当调用print()时,输出不是在终端屏幕上,而是写入到out.log文件中。类似Linux下的输出重定向“hello”>out.log文本流对象——sys.stdin、sys.stdout和sys.stderror文本流的读操作主要针对输入文本流,如通过open()函数且mode参数为”r”的输入流对象(文件对象)、io.StringIO类的实例对象、sys.stdin对象调用。read(size=n):从流中读取至多size个字符并以单个str的形式返回。如果size参数未提供或为负值,则返回所有字符序列readLine(size=n):读取至换行符或EOF并返回单个str。如果指定了size,最多将读取size个字符。注意此处的size并非行,而是一行中的字符数量。readlines(hint=n):从流中读取并返回包含多行的列表(List对象,Line作为List中的成员)。可以指定hint来控制要读取的行数,但注意hint指的是字节数,并非行的数量。文本流对象的读操作迭代访问:由于文本流对象是可迭代对象,在实际使用中使用迭代遍历的方式访问。可以按照行的方式进行迭代,每循环一次,取出一行字符串,直到最后一行。文本流对象的读操作导入案例中使用迭代访问的方式,循环一次,line遍历被赋予文件指针所指示的一行字符串(以\n为行标识符)。文本流的写操作主要是针对输出文本流对象,如通过open()函数且mode参数为”w”“a”“+”的输出流对象(文件对象)、io.StringIO类的实例对象、sys.stdout对象、sys.stderr对象。其他输入文本流调用下列方法会引发异常write(s):将字符串s写入流并返回写入的字符数writelines(lines):将行列表写入流。不会添加行分隔符,因此通常所提供的每一行都带有末尾行分隔符。其中,lines可以是字符串、列表、元祖、字典等数据类型。文本流对象的写操作studenstData数据结构为嵌套列表。参加数据结构部分的描述二进制I/O流提供了byte-likeobject(比特数据对象,包括bytes、bytearray、array.array)的输入/输出处理能力,即从流中读取的是比特数据,写入流中的数据也是比特数据。二进制I/O流是最基本的I/O流,文本I/O流就是在二进制流的基础上实现的。文本文件中存储的不是文字符号,而是字符编码,这些字符编码以二进制形式存储。应用场景:于二进制文件(图片、可执行程序文件等)的处理,文件的传输、复制、压缩等。二进制流对象通过open()函数调用获得二进制I/O流。mode参数为“br”“bw”“bx”“ba”“b+”。fileObj=open("myfile.jpg",mode="br")对于文本文件,也可以使用二进制流的方式打开inputFile=open("studentgrades.csv",mode="br")io.BytesIO类实例化对象参考教材示例二进制流对象--生成读操作read(size=-1,/)读取并返回最多size个字节。如果此参数被省略、为None或为负值,则读取并返回所有数据直到EOF。如果流已经到达EOF,则返回一个空的bytes对象写操作write(b,/)写入给定的bytes-likeobjectb,并返回写入的字节数(总是等于b的字节长度,因为如果写入失败则会引发OSError。根据具体实现的不同,这些字节可能被实际写入下层流,或是出于运行效率和冗余等考虑而暂存于缓冲区。指针操作seek(offset,whence=SEEK_SET,/)将流位置修改到给定的字节offset。offset将相对于由whence指定的位置进行解析。whence的默认值为SEEK_SET。whence的可用值如下:(1)SEEK_SET或0:流的开头(默认值),offset应为零或正值;(2)SEEK_CURor1:当前流位置,offset可以为负值;(3)SEEK_ENDor2:流的末尾,offset通常为负值。二进制流对象的操作二进制流对象的示例二进制流对象的示例文件的读写文件目录的管理文件属性信息的获取等不同操作系统平台下文件访问的差异磁盘文件的操作将需要计算处理的成绩表文件(csv文件)集中存放在一个目录下,目录的路径由用户指定,如果不指定,默认为当前目录。程序从指定目录中获取所有后缀名为csv文件(需要处理的成绩表文件),依次进行处理,并依次生成结果文件。结果文件放置在指定目录下,名字为result的子目录中。程序运行时,指定目录下如果没有result子目录,则自动创建。结果文件的文件名命名方式为“原文件名_final”。磁盘文件的操作-应用场景磁盘文件的操作获取用户输入的目录信息将工作目录切换至用户输入目录获取工作目录下的所有文件名和目录名列表items遍历items列表,将需要处理的成绩文件名放入inputFiles列表中inputFiles列表不为空,且在工作目录下没有result子目录,则新建result子目录从inputFiles列表取出一个元素file(待处理的文件名)根据file的文件名和扩展名及工作目录,构造结果文件的路径resutfilePath。使用open函数生成待处理文件的文本流inputFile通过inputFile文本流将文件中的内容读入、计算,结果存储在studentData列表使用open函数生成结果文件的文本流outfile将studentData通过outfile文本流写入结果文件中。关闭inputfile、outfile文本流inputFiles遍历完成?是否在命令行下执行python脚本,可通过sys.argv获得输入信息,argv参数是list类型,通过sys.argv[i]获取输入的各项参数。命令行中执行:pythonbatchDo.pyd:\pythonleansys.argv[0]值为batchDo.pysys.argv[1]值为d:\pythonlean从安全的角度,应该对输入的参数做判断是否合法。案例中用户输入的是否是一个实际存在的目录,需要进行判断os.path.exists(path)判断path路径信息是否存在获取用户输入的目录信息当前目录是指shell或命令行中运行Python时,定义的一个位置(目录),我们从该位置定位文件,称为工作目录,默认情况下,工作目录是运行Python命令的位置,而不是脚本程序所在的目录。os.getcwd():以字符串形式返回当前目录的路径os.chdir(path):切换当前工作目录到path指定的目录。Path参数可以使用”..”(切换到上一级目录),”/”(切换到根目录)将工作目录切换至用户输入目录获取工作目录下的所有文件名和目录名列表itemsos.listdir(path=’’.’)返回一个列表对象(List),列表元素是由

path

指定目录下的文件名和目录名称。path不指定时,默认返回当前目录下的文件名和目录名。Items列表中存储的是当前目录下的所有文件和子目录的名称,要从中找出需要处理的csv文件。os.path.isdir(path):判断path所表示的项目是否是一个目录。若path值是一个目录的路径,则返回True,否则返回Falseos.path.isfile(path):判断path所表示的项目是否是一个文件。若path值是一个文件的路径,则返回True,否则返回False。os.path.splitext(path):将路径名称path拆分为(root,ext)对,使得root+ext==path,并且扩展名ext为空或以句点打头。遍历items列表,将需要处理的成绩文件名放入inputFiles列表中os.mkdir(path):根据path参数创建一个目录。如果给定的路径是一个已存在的目录,则会抛出FileExistsError异常;如果路径中的某一父目录不存在,则会抛出FileNotFoundError异常。os.path.sep:指示当前操作系统表示路径时使用的分割符字符串。在window系统中,路径分割符号是’\\’;Linux、Unix系统中路径分隔符是’/’。由于不同平台的分隔符是不同的,因此在构造路径时,先得到对应平台的分隔符,然后再构造相应的路径。inputFiles列表不为空,且在工作目录下没有result子目录,则新建result子目录inputFiles列表不为空,且在工作目录下没有result子目录,则新建result子目录从inputFiles列表取出一个元素file(待处理的文件名)根据file的文件名和扩展名及工作目录,构造结果文件的路径resutfilePath。使用open函数生成待处理文件的文本流inputFile通过inputFile文本流将文件中的内容读入、计算,结果存储在studentData列表使用open函数生成结果文件的文本流outfile将studentData通过outfile文本流写入结果文件中。关闭inputfile、outfile文本流计算机只能存储和处理字节序列,字符的表示是通过建立字符集和字节序列之间的映射关系,不同的映射关系代表不同的编码。如:ASCII码、GBK码、Unicode等。将信息(字符)按照特定的规则转换成计算机系统可以处理的数据形式,这一转换过程称为编码(encode);将字符编码转换为字符符号的过程称为解码(decode)。字符编码基本概念互联网的兴起,世界各区域的信息交换成为常态,但由于各地区字符集在制定过程中缺乏统一的规范,不同区域的计算机系统之间无法较好地兼容彼此的字符集编码,从而导致乱码,给用户造成了不少困惑。国际标准化组织(InternationalOrganizationforStandardization,ISO)提出了建立全世界统一的字符集规范——Unicode字符集,Unicode使用两个字节(16bit)表示码位的值,可表示的字符集有2^16,65535个世界上的各种计算机操作系统、开发语言均支持Unicode字符集。Unicode编码Python编程入门与进阶第八章面向对象目录:案例导入...........................................类的定义与实例化...............................类的封装...............................类的继承.......................类的多态.......................总结............................................案例导入:Python中的面向对象面向对象编程——ObjectOrientedProgramming,简称OOP,与之相对应的另一种程序设计思想是面向过程编程。面向对象的设计思想是从自然界中来的,在自然界中,类和实例的概念我们很自然就能理解,因此,面向对象设计思想也被认为最贴近人类的认知习惯。我们喜欢给不同的事物划分类别,哺乳类,爬行类,昆虫类.....,在哺乳类下面有一个灵长类,我们人类属于灵长类,具体到每一个人都可以看做是人类的一个实例。面向过程编程从代码的组织形式来看就是根据业务从上至下的的垒代码,典型的特征就是写出一大堆的函数,还要定义很多全局变量和局部变量,一切的行为都是以函数为基础的。而面向对象编程将函数与变量进一步封装成类,一切的行为都是以类为基础的。类将数据和函数紧密的联系在一起并且保证数据不会被随意修改。本章作为基础基础教程最难的一章,主要目标是让你正确全面的认识面向对象,了解类和实例有关的各种概念。类的定义与实例化python是一种面向对象编程语言,自然也有类的概念。python中的类通过class关键字定义,提供了面向对象的所有标准特性,例如允许一个类继承多个基类,子类可以覆盖父类的方法,封装,继承,多态面向对象的三大特性python一样不少。对象属性的访问:对象属性的访问与修改,只能通过对象来进行实例方法,类方法,静态方法,类属性下面修改类Stu的定义来向你展示这3种方法的区别类的封装:python的面向对象,并没有严格意义上的私有属性和方法,私有只是一种约定,隐藏实现的细节,只对外公开我们想让他们使用的属性和方法,这就叫做封装,封装的目的在于保护类内部数据结构的完整性,因为使用类的用户无法直接看到类中的数据结构,只能使用类允许公开的数据,很好地避免了外部对内部数据的影响,提高了程序的可维护性。用户只能通过暴露出来的方法访问数据时,你可以在这些方法中加入一些控制逻辑,以实现一些特殊的控制。私有属性和方法:在python里,如果属性和方法前面是双下划线,那么这个属性和方法就变成了私有的属性。类的属性:类可以有自己属性,这个属性不同于实例的属性,类属性属于类,但是可以被实例访问。三种类方法:类的继承:继承是python面向对象的三大特性之一,是一种创建新类的方式,python中的继承,可以继承一个或者继承多个父类,新建的类被称之为派生类或者子类,被继承的类是父类,可以称之为基类,超类,继承是实现代码重用的重要方式。类的多态:python面向对象的多态依赖于继承,因为继承,使得子类拥有了父类的方法,子类的方法与父类方法重名时是重写,同一类事物,有多重形态,这就是面向对象概念里的多态,多态使得不同的子类对象调用相同的类方法,产生不同的执行结果,可以增加代码的外部调用灵活度。重写:在右侧的代码中:父类和子类都有print方法,那么子类A的对象a调用print方法时,调用的是谁的print方法呢?答案是子类的print方法,如果A类没有定义print方法,那么a.print()调用的是父类的print方法,但是A类定义了print方法,这种情况称之为重写,A类重写了父类的print方法。继承的搜索:强调继承时,子类“拥有”父类的方法和属性,特意加了双引号,因为,这种拥有不是真实意义上的拥有。在右侧代码中:Base.print和A.print的内存地址是相同的,这说明他们是同一个方法。执行A.print时,python会寻找print方法,它会先从A类的定义中寻找,没有找到,然后去A的父类里寻找print方法,如果还是找不到,就继续向上寻找。多态的表现形式:同一类事物,有多重形态在右侧代码中:People和Pig都继承了Animal,

温馨提示

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

评论

0/150

提交评论