第一章
变量命名规范
- 必须是数字或字母或下划线组成
- 不能是数字开头,更不能是纯数字
- 不能用python关键字
- 不要用中文
- 不要太长
- 要有意义
- 推荐使用下划线 或者驼峰命名
大写表示常量,但是python中没有绝对意义上的常量
数据类型:区分不同的数据,不同的数据类型应该有不同的操作
数字:+-*/
整数:int
小数:float
文字:展示
字符串:str
表示方式:
‘’
“”
‘’’ ‘’’(多行)
操作:
+ 左右两端必须是字符串,表示字符串连接操作
* 一个字符串只能乘一个数字,表示字符串重复的次数
布尔(bool):条件判断
Ture
False
交互1:
变量 = input(提示语) 坑:input()得到的一定是字符串
print(type(a)) 查看字符串
a = int (a) #将a的类型转换成整数类型
if 语句的语法规则:
1. if 条件1: #注意此处的冒号
代码1 #py中用缩进来划分层级
else 条件2: # if可以嵌套
代码2
如果条件成立就执行代码,不成立就跳过
2.if 条件1:
代码1
elif 条件2:
代码二
elif 条件3:
代码3
else:
代码4
While循环:
while 条件:
代码
过程:判断
Pass(关键字):代码占位
eg:a= 10
if a >100:
pass
else
第二章
int : 整数 +-*/ 大小比较
float : 小数\浮点数 小数:数据范围是无限的 整数:在某一特定的区间可以表示的很 清楚
bool :条件判断 取值范围:True和False 非0表示True,非空字符串表示True ->在py中,表示空的东西都是False,不空的东西都是Truezi
str字符串的格式化 : %s,%d
name = input(“请输入你的名字:”)
print(“我叫%s” %(name))
print(“我叫{ }”.format(name))
print(f“我叫{name}”) #3.5之后
字符串的常规操作 %字符串的操作一般不会对原来的字符串产生影响,一般是返回一个新的字符串
S1 = s.capitialize() #首字母大写
S1 = s.title() #语句各单词首字母大写
S1 = s.lower() #所有字母小写 处理部分欧洲文字有问题
S1 = s.upper() #所有字母大写 忽略大小写多用upper
字符串的索引和切片
索引:
S = “我叫周杰伦“ #采用索引的方法提取字符串里面的字
print(s[3])#可以是-1,从倒数第一开始数
- 杰
切片: #从字符串中提取一部分内容
S[3:6] #从索引3开始,到6结束
Eg:s = “我叫周杰伦,你呢?你叫周润发吗“
Print(s[3:6]) #前闭后开
- 杰伦,
S【start:end:step】
字符串的切割和替换
S1=s.Strip() #去掉语句左右两端的空格
User_name = input(“输入你的用户名:”).strip() #去掉两边的空白符(空格,\n,\t)
S1 = s.replace(old,new) #字符的替换
S1 = s.split(用什么切割) #字符串的切割
a = “python_java_c_c#_javascript” #用谁切割,就会损失谁
lst = a.split(“_”) #切割之后结果会放在列表中
print(lst) à [‘python’,’java’,’c’,’c#’,’javascript’]
字符串的查找和判断
查找:
S = “你好啊,我叫周润发”
- ret = s.find(“周润发”) #返回如果是-1就是没有该字符串出现
print(ret)
2. ret = s.index(“周润发“) #如果报错,就是没有
3. print(“周润发” (not)in s) #返回ture或者false
判断:
Name.startwith( )# name以什么开头
Name.endwith( )#name以什么结尾
Money.isdigit()#字符串是否以整数组成
补充:
Len(s) #计算字符串的长度
.Join() #对列表里的元素进行一个拼接
Eg:lst =(“赵本山”,”王大拿”,“大张伟”,“马大哈”)
S = “_”.join(lst)
Print(s)
à 赵本山_王大拿_大张伟_马大哈
List列表
特性:1.也像字符串一样有索引和切片
- 索引如果超过范围会报错
- 可以用for循环进行遍历
列表的增删改查
增加
lst = []
lst.append(元素) #追加元素
lst.insert(位置,元素) #插入
lst.extend(列表或者其他可迭代的东西)#合并两个列表(批量的追加)
删除
lst.pop(位置)#给出被删除的索引,返回被删除的元素
lst.remove(元素)#删除某个元素
修改
Lst【位置】= 元素 #直接用索引进行修改
查询
print(lst【位置】)#直接用索引进行查询
列表的其他操作
排序 #列表会按照你存放的顺序排序
Lst.sort() #对列表进行升序排序
Lst.sort(reverse=ture) #对列表进行降序排序“
列表的嵌套
Lst=【‘abc’,‘def’,【“呵呵呵“,”哈哈哈“】】
Tuple元组 特点:不可变的列表
T = (“张无忌”,“赵敏”) #一般用于固定了某些数据,不允许外界修改
T = (“哈哈”) #如果元组只有一个元素,类型会变成字符串,想 变成元组,需要在“哈哈“后面加一个逗号
T = (1,2,3【“哈哈哈”,“么么哒”】)#元组里面的列表可以变
Set集合 #无序的,不能放列表,unhashable type(哈希)
#py中的set集合进行数据存储的时候,需要对数据进行哈希计算,根据计 算出来的哈希值进行数据存贮,也就是说,set集合要求存储的数据必须是可以进行哈希计算的
可哈希:不可变的数据类型:int,str,tuple,bool
S={ }是字典
S={元素}是集合
S=set()#创建空集合,列表,元组同理
增加
s.add(元素) #添加元素
删除
s.pop(空) #没有索引,默认弹出内存最后一个,但集合无序,测试时没法验证
s.remove(元素)
修改
想要修改,先删除,再新增
先remove,再add
交集(&,intersection()),并集(|,union()),差集(-,difference())
Dict字典 #字典是以键值对的形式进行存储数据的,表示方式:{key1:value1,key2,value2
Dic = {“jay”:“周杰伦”,“金毛狮王”:“谢逊”} #key必须是可哈希的值
Val = [“jay”] #字典的key必须是可哈希的数据类型,value可以是任何数据类型
字典的增删改查
增加
dic[‘jay’] = “周杰伦” #可用于增加,也可用于修改
dic.setdefault(“tom”,“胡辣汤”) #设置默认值,如果前面已经有tom,setdefault不起作用
删除
dic.pop(“key”) #根据key进行删除
查询
Print(dic【key】)#通过key直接查询,如果key不存在,程序报错
Print(dic.get(“key”))#若果程序不存在,程序返回none
字典的循环和嵌套
循环
1.For key in dic
Print (key,dic【key】)
2.print(dic.keys()) #拿到所有的key
3.print(dic.values()) #拿到字典里的value
4.print(dic.items()) #拿到字典里的所有ket和value
a , b = (1,2) #元组和列表都可以执行这个操作,该操作被称为解构(解包)
print(a)
print(b)
à1
2
For key,value in dic.items():
Print(key,value)
- Key value
嵌套 #查询的时候参考列表
Wangfeng = {“name” = “汪峰,
“age“ = 18,
“wife“ : {
“name” : “章子怡”
“hobby”:”演戏”
“assistant”:{
“name”:“樵夫”
“age”:19
“hobby”:“打游戏”
}
}
“children“:【
{“name“:”孩儿1“,”age“:13},
{“name“:”孩儿2“,“age“:10},
{“name”:“孩儿3”,“age”:8},
】
}
Wangfeng【‘children’】【1】【‘age’】#第二个孩子的年龄
Wangfeng【‘children’】【1】【‘age’】+1 #第二个孩子加一岁
字典的循环删除
在循环的时候,不能直接删除
字符集和编码
0 1ó1010101010ó二进制转化成十进制ó88
电脑如何进行存储文字信息
1000000óa
ASCII编排了128个文字符号,只需要7个0和1就能表示,为了新的符号预留出1位,正好为1 byte,也就是8bit
ANSI => 一套标准,每个字符16bit,2byte
00000000 01111111
到了中国,gb2312编码,gbk编码(windows默认),gb18030编码
到了台湾,big5编码
到了日本,JIS编码
Unicode:万国码 (概念)
早期Unicode没有意识到汉字过多的问题,UCS-2,2个字节
进行了扩充,UCS-4 4个字节
00000000 00000000 00000000 00000001
utf:是可变长度的unicode,可以进行数据的传输和存储
utf-8 :最短的字节长度8
英文:8bit,1byte
欧洲文字:16bit,2byte
中文:24bit,3byte
utf-16 :最短的字节长度16
总结:
- ascii:8bit,1byte
- gbk:16bit,2byte (windows默认)
- Unicode:32bit,4byte(没法用,只是一个概念)
- Utf-8:
英文:8bit,1byte
欧洲文字:16bit,2byte
中文:24bit,3byte
gbk和utf-8不能直接进行转化
bytes字符
s = “周杰伦”
bs1 = s.encode(“gbk”) #转变成gbk标准下的字节
bs2 = s.encode(“utf-8”) #转变成utf-8标准下的字节
转换
先解码 ,再编码
S = bs.decode(“什么标准编码”)
Bs2 = S.encode(“编成什么码”)
运算符
- 算术运算
+ - * / % //
- 比较运算
== != > < >= <=
- 赋值运算
= += -= *=
- 逻辑运算
- and 并
- or 或
- not 非
括号 > not > and > or
- 成员运算
in
not in
文件操作
F = open(文件路径,mode=“ ”,encoding=“ ”) #需要手动close
with open(“文件路径”,mode=“ ”,encoding=“ ”)as f : #上下文,不需要手动关闭文件
文件路径“:
- 绝对路径 #不利于项目迁移
D:/test/xxx.txt
- 相对路径
相对于当前程序所在的文件夹
Open(“国产自拍.txt“) #读取当前文件夹下的文件
Open(“../葫芦娃.txt“) #获取其他文件夹下的文件,../表示上一层文件夹
Open(“../01XXX/XXX/XXX.TXT“)#其他文件夹下的文件
Mode:
r:read 读取
w:write 写入
a:append 最佳写入
b:读取非文本文件
encoding:
mac默认utf-8
windows默认gbk
读:
f = open(“国产自拍.txt“,mode=“r”,encoding=“utf-8”)
content = f.read() #全部读取
line = f.readline() #读一行
line = f.readline() #读第二行
line = f.readline().strip() #读第三行,且去掉空格
content = f.readlines() #全部读取,放进列表
for line in f: #利用循环从f中读取每行数据
print(line.strip())
写: #如果文件不存在,则会自动创建出一个文件
#w模式下,每一次open都会清空文件中的内容
f = open(“文件路径”,mode = “w”,encoding = “utf-8”)
f.write(“胡辣汤”) #写入内容
f.close() #关闭文件
for item in lst: #将列表内容使用循环写入文件
f.write(item)
f.write(“\n”)
f.close( )
f.open(“文件路径”,mode=“a”,encoding = “utf-8”)
f.write(“你好厉害”) #直接写入,不会清空文件夹内的东西
读取图片:
With open (“胡一菲.jpeg”,mode=”rb“)as f #非文本文件加个b
For line in f:
Print(line)
文件的复制:
With open(“胡一菲.jpeg”,mode=“rb“)as f1,\ # \表示换行
open (“胡二菲.jpeg”,mode=“wb“) as f2 :
for line in f1:
f2.write(line)
文件的修改:
Import os
with open(“文件路径1”,mode=“r”,encoding=“utf-8”)as f1,\
open (“文件路径2”,mode=“w”,encoding=“utf-8”) as f2 :
for line in f1:
line = line.strip() #删除空格
if line.startwith(“周”)
line = line.replace(“周”,“张”)
f2.write(line)
f2.write(”\n”)
time.sleep(3) #停止3s
#删除原文件
os.remove(“文件路径1”)
time.sleep(3) #停止3s
#把副本文件重命名成原文件
os.rename(“文件路径2”,“文件路径1”)