1、实验环境Python3
2、Python基础语法
2.1注释
号可以注释一行
'''或""",注释多段内容
2.2标识符(标识某个东西的符号)
第一个字符为字符或下划线(不能为数字)
2.3数据类型
常见数据类型有数、字符串、列表(list)、元组(tuple)、集合(set)、字典(dictionary)
数:1234567890
字符串:a='abc',a="abc",a='''abc’‘’输出结果一样
a.split('w')#指定分隔符
a.strip())#默认去除两边的空格
a.replace('w','h')#w替换成h
'_'.join(a)#必须是字符串拼接h_t_t_p_:_/_/_w_w_w_._o_l_d_b_o_y_e_d_u_._c_o_m_/
a.upper()#所有小写转大写
a.lower()#所有大小转小写
a.find('h')#元素所在位置,没有的时候会返回-1
a.index('h')#元素所在位置,没有的时候会报错
a.startswith()#判断是否以xx开头,返回布尔值
a.endswith()#判断是否以xx结尾,返回布尔值
a.count('w')#判断指定元素出现的次
print(a.center(20, '*'))#不够50个字符用*填充
列表:存储多个元素的,x=[a,b,c,d],x[0]代表第一个元素a,列表里面的元素可以重新赋值,如a[0]='123'
元组:存储多个元素的,x=(a,b,c.d),x[0]代表第一个元素a,元组里面的元素不可以重新赋值
字典:{键:值,键:值...},d={"name":"zhang","sex":"man","job":"studen"},取值格式字典名["对应键名"],如d["name"]显示的是'zhang'
集合:可以去重、并集、差集等等,test1=set("aljfdlasjdasdfasf"),test2=set("aljsdfopiewenfv"),去重可以用test1 or(或-) test2,并集可以用test1 and test2等
2.4运算符
常见的有+、-、×、/、%等,优先级与数学中基本一致,优先执行需加()
2.5缩进
同一层次的代码,需要设置同样的缩进(一般4个空格或tab键为一级)
2.6循环
2.6.1三种控制流概述
控制流-程序的执行流程:顺序结构;条件分之结构;循环结构;
2.6.2if判断语句
a=10
b=1
if(a>9):
pring(a)
if(b<9):
print(b)
elif(a>9 and a<=19):
print("haha")
else:
print("怎么可能")
2.6.3while循环语句
a=0
while(a<10):
print("hello")
a+=1
2.6.4for循环-遍历列表
a=["a","b","c"]
for i in a:
print(i)
for i in range(0,10):
#0,10为生成0-9的整数
print("hello")
2.6.4中断语句
break:全部退出,直接中断
a=["a","b","c"]
for i in a:
print(i)
if(i=="b"):
break
continue:中断(跳过)一次循环,继续下一次循环
a=["a","b","c"]
for i in a:
print(i)
if(i=="b"):
continue
2.6.5乘法口诀表
正序
for i in range(1,10):
for j in range(1,i+1):
print(str(i)+str("*")+str(j)+"="+str(i*j),end="\t")
print()
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
倒序
for i in range(9,0,-1):
for j in range(i,0,-1):
print(str(i)+str("*")+str(j)+"="+str(i*j),end="\t")
print()
9*9=81 9*8=72 9*7=63 9*6=54 9*5=45 9*4=36 9*3=27 9*2=189*1=9
8*8=64 8*7=56 8*6=48 8*5=40 8*4=32 8*3=24 8*2=16 8*1=8
7*7=49 7*6=42 7*5=35 7*4=28 7*3=21 7*2=14 7*1=7
6*6=36 6*5=30 6*4=24 6*3=18 6*2=12 6*1=6
5*5=25 5*4=20 5*3=15 5*2=10 5*1=5
4*4=16 4*3=12 4*2=8 4*1=4
3*3=9 3*2=6 3*1=3
2*2=4 2*1=2
1*1=1
3、Python函数与模块
函数的本质就是功能的封装,可以提高效率和可读性;
3.1局部变量和局部变量
变量生效范围称为作用域,作用域为全局就是全局变量,作用域为局部就为局部变量;
3.2函数
3.2.1定义函数方法
函数定义格式:
def 函数名(参数):
函数体
def abc():
print("abcde")
3.2.2调用函数
函数调用格式:
函数名(参数):
acb()
3.2.2函数参数使用详解
参数:与外界沟通的接口,分为形参和实参,一般在函数定义的时候使用的参数是形参,一般在函数调用的时候使用的参数是实参;
def bjdx(a,b):
if(a>b):
print("a比b大")
else:
print("b比a大或相等")
bjdx(4,5)
定义形参a.b,调用时输入a.b实参4,5进行比较,结果b比a大或相等;
3.3模块
模块组成:程序段组合-->功能块(函数)组合-->模块
3.3.1模块导入方式
我们可以使用一下两种方式导入模块:
import 模块名
或者
from ... import ...
3.3.2模块导入使用
import cgi
cgi.closelog()
--------------
from cgi import closelog
两种方式使用调用模块并使用模块方法
3.3.3第三方模块的安装
模块的来源:
自带模块;
第三方模块;
自定义模块;
安装第三方模块:
pip方式(网络安装);
whl下载安装的方式(下载安装);
whl下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs,安装直接使用pip install whl文件全名(pip install Cython‑0.29.11‑cp38‑cp38m‑win32.whl)
直接复制的方式;
anaconda安装模块;
3.3.4自定义模块
只要你把*.py文件放到模块文件目录(一般在软件安装目录lib下),他就是一个模块了,可以被调用;
4、文件操作
打开文件使用open(文件地址,操作形式)
w :写入(类似重定向>,先清空在写入)
r :读取
b :二进制
a+:追加
读取:
a=open("文件地址","参数(r)")
a.read()-读取全部内容
a.readline()-一行一行读取
a.close()
>>> a=open("/root/test1.txt","r")
>>> a.read()
'测试文本111111\n'
>>> a.close()
写入:
a=open("文件地址","参数(w)")
a.write("123123")-清空后再写入,追加写入参数要用a+
a.close()
>>> a=open("/root/test2.txt","w")
>>> a.write("测试写入功能!")
>>> a.close()
[root@test ~]# cat test2.txt
测试写入功能!
5、异常处理
容错机制,提高程序容错性!
异常处理格式
try:
程序
except Exception as 异常名称:
异常处理部分
事例1(出现异常显示异常):
try:
for i in range(0,10):
print(i)
if(i==4):
print(jsd)
print("hello")
except Exception as errors:
print(errors)
#pass 也可以使用pass什么都不显示
事例2(出现异常跳过继续执行):
for i in range(0,10):
try:
print(i)
if(i==4):
print(jsd)
except Exception as errors:
#pass 也可以使用pass什么都不显示
print(errors)
print("hello")
6、Python面向对象编程*
6.1面向对象变成概述
面向对象编程即OOP编程,区别于面向过程编程,面向对象编程比较适合开发大项目(面向过程编程适合中小项目),会以更接近人类的思维的角度去写程序;
6.2类和对象
类:具有某种特征的失误的集合(群体);
对象:群体(类)里面的个体;
类是抽象的,对象是具体的。
创建类格式:
class 类名:
类里面的内容
事例1:
#创建一个类
class cl1:
pass
>>> cl1
<class '__main__.cl1'>
#实例化一个类
>>> a=cl1()
>>> a
<__main__.cl1 object at 0x7fd798e95be0>
6.3构造函数(构造方法)
类在实例化的时候自动首先触发的方法,构造出一个对象的时候就首先出发的方法;
self:在类中的方法必须加上self参数
构造函数:init(self,参数)
构造函数实际意义:初始化
class cl2:
def __init__(self):
print("I an cl2 self!")
>>> b=cl2()
I an cl2 self!
>>> b
<__main__.cl2 object at 0x7fd798e95dd8>
6.4给类加上参数(给构造方法加上参数)
class cl3:
def __init__(self,name,job):
print(" My name is "+name+" My job is "+job)
>>> c=cl3("shuaige","teacher")
My name is shuaige My job is teacher
>>> c2=cl3("xiaoli","hah")
My name is xiaoli My job is hah
6.5属性和方法
属性:静态的特征,如头发、手臂等,相当于类里面的变量;
属性调用方法:
class cl4:
def __init__(self,name,job):
self.myname=name
self.myjob=job
>>> d=cl4("xiaobai","teacher")
>>> d
<__main__.cl4 object at 0x7fd798dfa198>
>>> d.myname
'xiaobai'
>>> d.myjob
'teacher'
方法:类里面的函数,def 方法(函数)名(self,参数)
class cl5:
def myfunc1(self,name):
print("hello"+name)
>>> f=cl5()
>>> f.myfunc1("shuai")
helloshuai
class cl6:
def __init__(self,name):
self.myname=name
def myfunc1(self):
print("hello"+self.myname)
>>> f=cl6("zhangshuai")
>>> f
<__main__.cl6 object at 0x7f817793acc0>
>>> f.myfunc1()
hellozhangshuai
6.6继承与重载
继承:把某一个或多个类(基类)的特征拿过来;
重载:在子类(派生类)里面对继承过来的特征重新定义;
父类:基类
子类:派生类
基类1(例如父亲有说的能力):
class father():
def speak(self):
print("I can speak!")
单继承(例如儿子继承父亲说的能力):
class son(father):
pass
>>> s=son()
>>> s.speak()
I can speak!
基类2(例如母亲有写的能力):
class mother():
def write(self):
print("I can write!")
多继承(例如女儿继承了父亲说和母亲的写能力,自己还有听的能力)
class daughter(father,mother):
def listen(self):
print("I can listen!")
>>> h=daughter()
>>> h.speak()
I can speak!
>>> h.write()
I can write!
>>> h.listen()
I can listen!
重写(重载,可以将继承过来的能力进行覆盖):
class son2(father):
def speak(self):
print("I can speak 2!")
>>> j=son2()
>>> j.speak()
I can speak 2!
练习:
将多个excel文档合并(使用xlrd、xlwt、openpyxl、xlsxwriter模块)
xlwt和xlsxwriter不支持修改表,信息追加会比较麻烦
Excel结构:
Workboot 工作薄(相当于一个类)
Worksheet 标签(相当于一个属性、方法)
title 标题
row 行
column 列
cell 单元格
value 值
save() 存储行为
add_sheet 增加一个表单
write 在指定单元各写入数据
简单事例1:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> ws = wb.active
>>> ws
<Worksheet "Sheet">
>>> ws.title = "课程表"
>>> wb
<openpyxl.workbook.workbook.Workbook object at 0x7f254a558d68>
>>> ws["A1"].value = "帅哥的课"
>>> ws["A1"]
<Cell '课程表'.A1>
>>> ws["A1"].value
'帅哥的课'
>>> ws["C5"] = "帅哥开课了!"
>>> ws["C5"].value
'帅哥开课了!'
>>> wb.save(r"test.xlsx")
简单事例2:
>>> import xlrd
>>> wb = xlrd.open_workbook("/usr/lib/python2.7/site-packages/test.xlsx")
>>> sheet = wb.sheet_by_index(0)
>>> print("该Excel文件有行数"+str(sheet.nrows))
该Excel文件有行数5
>>> values_line = sheet.row_values(0)
>>> print(values_line)
['帅哥的课', '', '']
简单事例2(显示表数据):
import xlrd
wb = xlrd.open_workbook("/usr/lib/python2.7/site-packages/test.xlsx")
sheet = wb.sheet_by_index(0)
print("该Excel文件有行数"+str(sheet.nrows))
该Excel文件有行数5
values_line = sheet.row_values(4)
print(values_line)
['帅哥的课', '', '']
显示全部内容:
for i in range(0,sheet.nrows):
line = sheet.row_values(i)
print("第%d行数据:"%i,end="")
#%d为数字占位符,调用后面i的值
print(line)
第0行数据:['帅哥的课', '', '']
第1行数据:['', '', '']
第2行数据:['', '', '']
第3行数据:['', '', '']
第4行数据:['', '', '帅哥开课了!']
持续更新中(我正在学习!!)
BTC:3LD8DBk5nZSwmGoF1mvM12Pp5YqNFEvfLA
ETH:0xAD765200e7Feb98a2AF262387A41F078e9F91eAc