开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2021.08.19
第一章程序设计与Python语言3
一、Python语言的基本语法
1.Python程序元素
(1)缩进
·1个TAB键或4个空格
·表示代码的层次关系
·是Python语言中表示程序框架的唯一手段
(2)注释
·开发者加入的说明信息,不被执行
·单行注释以#开头
·多行注释以三引号(""")开始和结束
(3)常量与变量
·常量:
o程序执行过程中,值不发生改变的元素;
o程序中多次使用的值可作为常量,便于更改及维护。
·变量:
o程序执行过程中,值发生改变或需要改变的元素。
(4)命名
·为程序元素关联一个名称,要保证唯一性
·Python标识符
o在Python里,标识符由字母、数字、下划线组成;但不能以数字开头。
o在Python中,所有标识符区分大小写
o以下划线开头的标识符是有特殊意义的。以单下划线开头_foo的代表不能直接访问的类属性,需要通过类提供的接口进行访问,不能以from…import*而导入
o以双下划线开头的__foo代表类的私有成员;以双下划线开头和结尾的__foo__代表Python里特殊方法专用的标识符,如,__init__()代表类的构造函数。
o不能与保留字相同
#=============查看系统(Python3.x)保留字=============
#导入模块
importkeyword
#keyword帮助文档
help(keyword)
#Python关键字列表
print(keyword.kwlist)
keyword.kwlist
#判断字符串是否是Python关键字
keyword.iskeyword('and')
keyword.iskeyword('has')
保留字:['False','None','True','and','as','assert','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']
(5)表达式
·程序中产生新数据值或执行操作的一行代码
·运算符
o**指数
o//相除取整(商)
o%取余
o!=不相等
(6)输入
·input()#获得用户的输入并以字符串的形式保存
(7)输出
·print()#输出信息
二、数据结构
1.数值型
Python中常用的数值类型
(1)整数类型,与数学中的整数概念一致;如:100,-250
(2)浮点数类型,带有小数点及小数的数值;如:0.0,-3.14,3.4e-3(科学计数法)
(3)类型转换:
·整数→浮点数,float(4)→4.0
·浮点数→整数,int(3.14)→3,只会保留整数部分
·字符串→整数,int('3')→3
·字符串→浮点数,float('3.14')→3.14
(4)判断类型:type()函数
2.字符串
(1)文本在程序中通过字符串(string)类型表示
(2)两个双引号或单引号括起来表示
(3)索引/访问方式
·正向索引:0,1,2,……
·反向索引:……,-3,-2,-1;[:-3]#字符串不取后3位;[-3:]#取字符串后3位
·区间索引[A:B:C]:从位置A到B的部分字符串,不包含位置B,步长为C
(5)字符串格式化输出,使用{}占位:str.format()
如,
'{}公斤,{}厘米'.format(70,175)
重复输出时可以使用数字标记顺序:'{0}公斤,{1}厘米,{0}公斤'.format(70,175)
(6)字符串乘以一个数字n,结果为由n个该字符串组成的字符串,即字符串的复制
(7)Python字符串操作
str.isnumeric()#检测字符串是否只由数字组成
str.isalpha()#检测字符串是否只由字母组成
str.islower()#检测字符串中所有字母是否都为小写
str.isupper()#检测字符串中所有字母是否都为大写
(8)代码示例
#======字符串操作========#
input_str='性别体重(Kg)身高(Cm)年龄'
input_str.find('')#字符串查找
input_str.split('')#字符串分割
type(input_str.split(''))#查看类型,为list类型(容器)
input_str.split('')[1]#字符串分割后,取第2个元素
#字符串的格式化:{}占位;str.split()
'{1},{0}'.format(70,100)#对应位置输出100,70
#=============索引练习=============
s='Python'
print(s)
print(s[2])#正向位置索引
print(s[-4])#反向位置索引
print(s[2:4])#正向区间索引,前闭后开
print(s[:3])
print(s[0:3])
print(s[-3:])#反向区间索引,获取后3位
print(s[:-3])#去除最后3个字符
#列表list的所引
#var[A:B:C]#A索引初始位置,B索引索引结束为止,C:步长;前闭后开
n=[0,1,2,3,4,5,6,7,8,9,10]
print(n[2:8:3])
a="Hi"
a*2
a*7
#=====字符串操作练习=====
password='abc123def'
len(password)#字符串长度
password.isnumeric()#字符串是否只含有数字
password.isalpha()#字符串是否只含有字母
password.islower()#字符串是否均为小写
password.isupper()#字符串是否均为大写
forXinpassword:
print(X)
3.列表
(1)列表(list)是有序的元素集合
(2)可通过索引访问单个元素,如l[2],l[-1]
(3)可通过区间索引访问子列表内容,如l[2:5],l[-3:],依然是前闭后开
(4)列表中每个元素类型可以不同
注:列表排序
·list.sort(func)#func指定了排序的方法
·func可以通过匿名函数lambda实现
#======列表操作练习=======
l1=[1,3,5,7,9]
l1
l2=[2,4,6.5,8,'abc']
print(l2)
l1+l2#连接两个list中的内容
l1*3#将列表l1重复3次
len(l1)#返回列表长度
1inl1#判断元素1时是否在列表l1中,返回逻辑值
l1.append(11)#在列表l1后追加元素11
l1=[1,3,7,5,9,9]
l1.sort()#list中元素排序
l1.reverse()#list中元素逆序
l1.index(5)#返回list中元素5的位置
l1.insert(2,10)#在索引为2的位置插入元素10
l1.count(9)#返回list中元素9的个数
l1.remove(10)#删除元素10
l1.pop(2)#取出列表中i元素所在的位置,并将其删除
4.元组(tuple)
(1)元组是特殊的序列类型
(2)一旦被创建就不能修改,使代码更安全
(3)使用逗号和圆括号来表示,如,(1,"green","True"),(1,2,3)
(4)访问方式和列表相同
(5)一般用于表达固定数据项、函数多返回值等情况
(6)特点:
o元组中的元素可以是不同类型的
o元组中各元素存在先后关系,可通过索引访问元组中的元素
(7)元组与列表
o元组是不可变的,列表是可变的
o元组通常由不同的数据组成,列表通常是由相同类型的数据组成
o元组表示的是结构,列表表示的是顺序
##======数据容器:元组(tuple)练习======
##元组中的元素不能进行增删改
##元组和列表都能包含不同的数据类型,但是一般列表放同一类型的数据元素
l=[1,2,3,4,5]
type(l)
l[1]=5#修改元素
dell[1]#删除第二个元素
l.append(6)#末尾追加一个元素
t=(1,2,3,4,5)
type(t)
t[1]=5
a=()#空元组
type(a)
a=(123)#返回int型
a=(1,"ni",'TRUE')
a
b=[1,"ni",'TRUE']
b
(1)zip()函数
zip()函数用于将对应的元素打包成一个个元组
注意:元组中的元素是不可修改的,若要修改需要转换成字典或其他数据容器类型,如dict(zip(l1,l2))
5.集合(set)
(1)Python中的集合(set)类型同数学中的集合概念一致,即包含0或多个数据项的无序组合
(2)集合中的元素不可重复
(3)集合是无序组合,没有索引和位置的概念
(4)set()函数用于集合的生成,返回结果是一个无重复且排序任意的集合
(5)集合通常用于表示成员间的关系、元素去重等
(6)集合操作
##======数据容器:集合(set)练习======
l=[1,2,3,4,5,3,5]#列表
l
t=set(l)
t
s={1,3,5,7,9}
s-t#返回差集
s&t#返回交集
s|t#返回并集
s^t#返回并集,去掉交集
6.字典(dict)
(1)字典类型(dict)是“键-值”数据项的组合,每个元素是一个键值对
·如:身份证号(键)-个人信息(值)
(2)字典类型数据通过映射查找数据项
·映射:通过任意键查找集合中的值的过程
(3)字典类型以键为索引,一个键对应于一个值
(4)字典类型的数据是无序的
(5)基本操作
a)d[key]=value#增加一项
b)d[key]#访问
c)deld[key]#删除某项
d)keyind#判断key是否在字典里
(6)字典的遍历
a)遍历所有的key
forkeyind.keys():
print(key)
b)遍历所有的value
forvalueind.values()
print(value)
c)遍历所有的数据项
foritemind.items():
print(item)
#======数据容器:字典(key-value)练习======
#字典间的值是无序的
d=dict()#创建空字典
d['eggs']=2.59#添加数据项,键值对
d['milk']=3.19
d['cheese']=4.8
d['eggs']=3.59#修改数据项,键值对
deld['cheese']#删除数据项
'eggs'ind#查看数据项是否在字典中
d.keys()#遍历keys
d.values()#遍历values
d.items()#变量键值对
list(d.values())
list(d.values())[1]
7.补充:解析式
(1)列表
(2)字典
三.Python的语句结构
1.分支结构if
(1)控制程序的语句
(2)根据判断条件选择程序的执行路径
(3)使用方法
if<条件1>:
<语句块>
elif<条件2>:
…
else:
<语句块N>
(4)pass语句
1)pass语句不会执行任何操作
2)pass语句可作为占位符
3)pass语句可以用来创建占位程序
2.循环语句
(1)while循环
1)控制程序的语句
2)根据判断条件确定一段程序是否再次执行一次或者多次
3)使用方法
while(<条件1>):
<语句块1>
<语句块2>
4)当条件为真(TRUE)时,执行语句块1;为假(FASLE)时,退出循环。
(2)for循环
1)使用for语句可以循环遍历整个序列的内容
for
2)循环变量x在每次循环时,被赋值成对应的元素内容
3)与while循环的区别
a)for循环次数固定,即遍历的序列长度
b)while为无限循环
4)range(n)返回一个可迭代的对象
a)list(range(n))将迭代类型转换为列表类型
b)range(n)#返回从0到n-1的值
c)range(1,n)#返回1到n-1的值
5)循环的终止
#=====终止循环操作练习=====
foriinrange(100):
ifi%2==0:
break#终止整个循环,之后所有的语句都不执行
print(i)#无输出
continue#终止本次循环,继续下一次循环
print(i)#输出奇数
(3)enumerate()函数
enumerate()函数用于将可遍历的组合转换为一个序列索引
一般用于for循环中,同时列出元素和元素的索引号
四、Python函数
1.函数
·将特定功能代码编写在一个函数里
·便于阅读和复用
·对一组表达特定功能表达式的封装
·使程序模块化
·Python内置函数input(),print(),eval()
(1)函数的定义
def<函数名>(<参数列表>):
<函数体>
return<返回值列表>
(2)函数的调用过程
·调用程序在调用函数处暂停执行
·调用时将参数(实参)赋值给函数的参数(形参)
·执行函数体
·返回函数结果,回到调用处继续执行
2.匿名函数lambda
·特殊函数-匿名函数
·使用方法:
<函数名>=lambda<形参列表>:<表达式>
·用于简单的、能够在一行内表示的函数,计算结果为返回值
3.函数的参数传递
(1)函数通过参数与调用程序传递信息
(2)变量的作用范围
a)局部,函数内的变量作用范围只在函数内
b)全局,函数外的变量,在所有函数中都能使用,global
(3)函数的形参只接受实参的值,给形参赋值并不影响实参
#=====变量作用范围=====
#示例1:局部变量
defnum_value(num1):
num1=2
num1=1
num_value(num1)
print(num1)#1
#示例2:全局变量
defnum_value():
globalnum1
num_value()
print(num1)#2
五.面向对象编程
1.基本介绍
(1)面向过程(ProcedureOrientedProgramming,POP):以程序执行过程为设计流程的编程思想
(2)面向对象(ObjectOrientedProgramming,OOP):以事物为中心的编程思想
(3)什么是对象(Object)?
a)现实世界中的对象:①属性;②行为
(4)对象的例子:
a)波斯猫属性:品种、颜色、大小;行为:叫、捉老鼠
b)吉普车属性:类型、用途;行为:发动、停车
(5)类(class):某种类型集合的描述
(6)属性:类本身的一些特性
(7)方法:类所能实现的行为
(8)类的定义:
classClassName:
__init__(self)#构造函数:初始化对象的各属性
#self代表类的实例
#__init__(self)中self参数,不需要开发者传递,python解释器会自动把当前对象引用传递进去
2.面向对象的特点
(1)封装
·支持代码复用
(2)继承
·子类(subclass)借用父类(superclass)的行为
·避免重复操作,提升代码复用程度
·定义classClassName(SuperClassName)
(3)多态
·在不同情况下用一个函数名启用不同方法
·灵活性
六.异常处理机制
引入异常处理机制可以用来解决程序运行时的错误
语法:
七、文件
(1)文件的基础
1)文件:存储在外部介质(如:硬盘)上的数据或信息的集合
2)文本文件:一般指只有字符编码存储的文件,能够被简单的文本编辑器直接读取
3)编码:信息从一种形式转换成另一种形式的过程
4)常用的编码:ASCII、Unicode、UTF-8等
5)多行文本,用表示换行
(2)文件的操作
步骤IPO:打开文件→操作文件(读写等)→关闭文件
1)打开文件:建立文件与程序的关联
open(filename,mode)#filename:文件名(包括路径);mode:打开模式
2)操作文件:写入、读取等
·写入操作:从计算机内存向文件写入数据
·读取操作:从文件中读取数据到计算机内存中
oread()#返回值为包含整个文件内容的一个字符串
oreadline()#返回值为文件下一行内容的字符串
oreadlines()#返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串
#1.read()
content=f.read()#文本整体当成字符串
f.close()
print(content)
#2.readline()
line=f.readline()#每次只读1行数据
print(line)
#3.readlines()
lines=f.readlines()#读取文件的所有行存入列表中,每一行是一个元素
print(lines)
o文件的遍历
#按行输出1:
forlineinf.readlines():
print('read:{}'.format(line))#处理一行数据
#按行输出2:
forlineinf:
print('read:{}'.format(line))
3)关闭文件:终止程序与文件的关联
close()
4)使用with语句操作文件对象
withopen('file_name')assomefile:
forlineinsomefile:
使用with语句,不管在处理文件过程是否发生异常,都能保证with语句执行完毕后关闭文件。不需要close()语句。
八、库/模块
调用:①库.函数();②对象.属性
(1).keyword库
(2).math库
#====Python库操作练习=====
importmath
math.fsum(l1)
math.pi
math.floor(2.2)
(3).datetime库
4)datetime→字符串:datetime.strftime()#格式化format为字符串显示
5)isocalender():返回年,周数,及周几
importdatetime
now=datetime.datetime.now()#模块.函数()
now
type(datetime.datetime.now())
now.day#对象.元素
#Y大写的为4位格式,y小写的为2位格式
datetime.datetime.strptime('2019/07/05',format('%Y/%m/%d'))
datetime.datetime.strptime('19-07-05',format('%y-%m-%d'))
datetime.datetime.strptime('2019-07-05',format('%Y-%m-%d'))
now.isocalendar()#输出年份和周数(2019,29,2),2019年第29周的周二
datetime.datetime.strftime(now,'%d/%m/%Y')
(4).random模块
random模块用于生成随机数
常用函数
#======随机数模块练习========
importrandom
random.random()#生成一个[0,1)间的随机浮点数
random.uniform(1,10)#生成一个[a,b]间的随机浮点数
random.randint(1,10)#生成一个[a,b]间的随机整数
l=list(range(10))#生成一个[0,10)的列表
random.choice(l)#从列表l中随机返回一个元素
random.shuffle(l)#将列表中的元素随机打乱
random.sample(l,4)#从指定列表中随机获取4个元素
random.sample(list(range(1,7)),2)
(5).matplotlib模块
matplotlib是一个数据可视化函数库pip/condainstallmatplotlib#终端安装
matplotlib的子模块pyplot提供了了2D图表制作的基本函数
1)matplotlib绘制散点图:
importmatplotlib.pyplotasplt#x,y分别是x坐标和y坐标的列表
plt.scatter(x,y)
plt.show()
2)matplotlib绘制直方图
plt.hist(data,bins)#data:数据列表;bins:分组边界
plt.xticks()#设置x坐标的坐标点位置及标签
plt.title()#设置绘图标题
plt.xlabel(),plt.ylabel()#设置坐标轴的标签
(6).NumPy模块
1)NumPy(NumericPython):用Python实现的科学计算库
包括:
·强大的N维数组对象
·成熟的科学计算库
·实用的线性代数、随机数生成函数等
2)NumPy的操作对象是多维数组ndarray
·ndarray.shape数组的维度
3)创建数组:np.array(),np.arange()
4)改变数组形状reshape()
5)NumPy创建随机数组
·np.random.randint(a,b,size)#创建[a,b)间形状为size的数组
例如,
6)NumPy基本运算
以数组为对象进行基本运算,即向量化操作
·np.histogram()#输出直方图的统计结果
(7).JSON模块
1)JSON格式
·JSON(JavaScriptObjectNotation)是一种轻量级数据交换格式
·可以对复杂数据进行表达和存储,易于阅读和理解
·规则:
①数据保存在键值对中
②键值对之间由逗号分隔
③花括号(字典)用于保存键值对数据组成的对象
④方括号(列表)用于保存键值对数据组成的数组
·采用对象、数组方式组织起来的键值对可以表示任何结构的数据
·json格式是互联网上主要使用的复杂数据格式之一
2)JSON库
·JSON库是处理JSON格式的Python标准库
·两个过程:
o编码(encoding),将Python数据类型转换成JSON格式的过程
o解码(decoding),从JSON格式中解析数据对应到Python数据类型的过程
(8).CSV模块
1)CSV格式
·csv(Comma-SeparatedValues)是一种通用的、相对简单的文件格式
·在商业和科学领域上广泛使用
·规则
①以行为单位
②每行表示一条记录
③以英文逗号分隔每列数据(如果数据为空,逗号也要保留)
④列名通常放置在文件第一行
2)CSV库
CSV文件读取
importcsv
csv.writerow(list)#将列表中的元素写入文件的一行中
(9).os模块
#======os模块中的join()方法练习======
importos
l=['1','2','3','4','5']
'+'.join(l)
eval('+'.join(l))
(9).requests模块
·requests模块是一个简洁且简单的处理HTTP请求的工具
·支持非常丰富的链接访问功能,包括URL获取,HTTP会话,Cookie记录等
·requests网页请求
·requests对象属性
(10).BeautifulSoup模块1)网页解析
·结构化解析
·DOM(DocumentObjectModel),树形结构
2)BeautifulSoup解析网页
a)BeautifulSoup用于解析HTML或XML
b)安装pipinstallbeautifulsoup4
c)导入frombs4importBeautifulSoup
d)使用步骤
·创建BeautifulSoup对象
bs=BeautifulSoup(url,
html_parser,#指定解析器
encoding#指定编码格式(确保和网页编码格式一致)
)
·查询节点
ofind#找到第一个满足条件的节点
ofind_all,找到所有满足条件的节点
可按节点类型、属性或者内容访问
①按类型查找节点
bs.find_all('a')
②按属性查找节点
bs.find_all('a',class_='a_link')#注意:是class_
或者:bs.find_all('a',{'class':'a_link'})
(11).Pandas模块
1)什么是Pandas
·Pandas是一个强大的分析结构化数据的工具集
·基础是Numpy,提供了高性能矩阵的运算
·应用:数据挖掘、数据分析
o如,学生成绩分析、股票数据分析等
·提供数据清洗功能
2)Pandas的数据结构
·Series:类似一维数组的对象
o通过list构建Series:ser_obj=pd.Series(range(1,10))
o由数据和索引组成:①索引在左,数据在右;②索引时自动创建的
o获取数据和索引:ser_obj.index,ser_obj.values
o预览数据:ser_obj.head(n),ser_obj.tail(n)
o通过索引获取数据:ser_obj[idx]
o索引与数据的对应关系仍保持在数组运算的结果中
o通过dict构建Series
oname属性:ser_obj.name,ser_obj.index.name
·DataFrame:类似多维数组/表格数据(如,excel和R中的data.frame)
o每列数据可以是不同的类型
o索引包括列索引和行索引
o通过ndarray构建DataFrame
o通过列索引获取列数据(Series类型):df_obj[col_idx]或df_obj.col_idx
o增加列数据,类似dict添加key-value:df_obj[new_col_idx]=data
o删除列:deldf_obj[col_idx]
3)Pandas的数据操作
·DataFrame索引操作
o列索引:df_obj['label']
o不连续索引:df_obj[['label1','label2']]
·排序
osort_index,索引排序:对DataFrame操作时注意轴方向
o按值排序:sort_value(by='label')
4)Pandas统计计算和描述
·常用的统计计算
osum,mean,max,min……
oaxis=0按列统计,axis=1按行统计
oskipna#排除缺失值,默认为True
oidmax,idmin,cumsum
·统计描述
odescribe#产生多个统计数据
5)Pandas数据清洗
·处理缺失数据
odropna()#丢弃缺失数据
ofillna()#填充缺失数据
·数据过滤
odf[filter_condition]#依据filter_condition对数据进行过滤
6)Pandas数据可视化
·Pandas提供了内建的绘图功能(基于matplotlib)
oplot(kind,x,y,title,figsize)#x,y横纵坐标对应的数据列;title图像名称;figsize图像尺寸