目录
1.python基础类型详解
int float bool str (******)字符串 list (******)列表 tuple (**) 元组 set () 集合 dict (******) 字典 bytes(****)字节 运算符(***) 文件操作(****)
2.int_float_bool
2.1 int
int : 整数,加减乘除,大小比较
a = 10
2.2 float
float: 小数,浮点数
a = 10.5
print(a)#结果:10.5
2.3 bool
bool : 用来做条件判断的 取值范围:TURE,flase
2.4 基础数据类型之间的转化
a = '10' #字符串
print(type(a)) #结果:<class 'str'>
b = int(a)
print(type(b)) #结果:<class 'int'>
a = 10
b = bool(a)
print(type(b)) #结果:<class 'bool'>
print(b) #结果:True
在python的基本数据类型中,表示空的东西都是false,不空的东西都是ture
s = '' #在python中,表示空的东西,都是false,不是空的东西都是Ture
print(bool(s)) #结果:False
3.字符串
3.1 字符串的格式化问题
input接收的打印出来都是字符串类型
name = input("请输入你的名字:") # 输入:周润发
address = input("请输入你的地址:") # 输入:香港
print(name) # 结果:周润发
print(type(address)) # 结果:<class 'str'>
%S 字符串占位 %d 占整数位
name = input("请输入你的名字:") # 输入:周润发
address = input("请输入你的地址:") # 输入:香港
age = input("请输入你的年龄:") #输入 :18
s = "我叫%s,我输在%s,我的年龄是%s" % (name,address,age)
s1 = "我叫{},我输在{},我的年龄是{}".format(name,address,age)
s2 = f"我叫{name},我叫{name},我叫{name},我叫{name},我叫{name},我叫{age}" #f-string
print(s) # 结果:我叫周润发,我输在香港,我的年龄是18
print(s1) # 结果:我叫周润发,我输在香港,我的年龄是18
print(s2) # 结果: 我叫周润发,我叫周润发,我叫周润发,我叫周润发,我叫周润发,我叫18
3.2 索引和切片
索引:按照位置提取元素
s = "我叫周杰伦"
#可以采用索引的方式来提取某一个字符(文字)
print(s[3]) #杰 从0开始数数
print(s[-1]) # 伦 倒数第一个
切片: 从一个字符串中提取一部分内容 语法:s[start,end] 从start到end进行切片,但是取不到end
s = "我叫周杰伦,我唱歌很好"
print(s[3:6]) #杰伦, 从索引3位置进行切片,切到6结束
print(s[-3:-1]) #歌很 #只能从左往右切片
#等同于print(s[-3:-1:1])
r = "我爱你"
print(r[::-1]) #你爱我 #最后的是步长
s = "jiafiahdhfaadaf"
print(s[3:8:2]) #fad 切片3-8,步长为2
3.3 字符串常规操作
字符串的操作一般不会对原来的字符串产生影响,一般都是产生一个新的字符串
3.3.1 字符串的大小写转换
s = "python"
s1 = s.capitalize() #单词的首字母大写
print(s1)
s = "I have a dream!"
s1 = s.title() #每个单词的首字母大写
print(s1)
s = "I HAVE A DREAM"
s1 = s.lower() # 变成小写
print(s1)
s = 'i have a dream'
s1 = s.upper() # 把所有字母变成大写
print(s1)
#如何忽略大小写来进行判断
verify = "xAoa"
user_input = input(f"请输入验证码({verify}):")
if verify.upper() == user_input.upper():
print("验证成功")
else:
print("验证失败")
3.3.2 切割和替换(*)
# strip()去除字符串两端的空白
s = " 你好, 我叫, 周杰伦 "
s1 = s.strip()# 去掉字符串两端的空白符(空格,\t \n)
print(s1) #结果:你好, 我叫, 周杰伦
#replace(old,new) 字符串替换
s = "你好啊,我叫奥利给"
s1 = s.replace("奥利给","周杰伦")
print(s1) #结果:你好啊,我叫周杰伦
a = "a b c d e f g"
a1 = a.replace(' ','') #去掉所有的空格
print(a1) #结果:abcdefg
# split(用什么切割) 字符串切割 #用谁切就会损失掉谁。
a = "python_java_c_c#_javascript"
lst = a.split("_") #切割以后会放在列表中
print(lst) # 结果:['python', 'java', 'c', 'c#', 'javascript']
3.3.3 查找和判断
# 查找
s = "你好啊,我叫周润发"
ret = s.find("周润发12312") #返回-1就是没有该字符串出现
print(ret) # 结果:-1
ret = s.index("周润发12312") #如果报错了就是没有
print(ret) # 结果:报错
#in可以做条件上的判断
print("周润发" in s) # 结果:ture
print("周润发" not in s) #结果:false
# 判断
name = input("请输入你的名字:")
#判断你是不是姓张
if name.startswith("张"): #判断字符串是不是以xxxxx开头,endswith()结尾
print("你姓张")
else:
print("你不姓张")
money = input('请输入你兜里的钱:')
if money.isdigit(): #判断字符串是不是整数组成
print("你可以画画了")
else:
print('对不起')
3.3.4 补充
s = "hello"
print(len(s)) #统计这个字符串里有几个字符
lst = ['a','b','c']
s = ''.join(lst) #把列表中的字符串连接起来
print(s) #abc
4.列表
在python中用[]来表示一个列表,列表元素通过,隔开
a = ["张三丰",'张无忌',[1,3,5,True]]
4.1 列表的特性
特性: # 1、 也像字符串一样有索引和切片 # 2、索引超过范围会报错 # 3、可以用for来进行遍历 # 4、可以用len拿到列表的长度
1、 也像字符串一样有索引和切片
lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]
print(lis[0]) 金毛狮王
print(lis[1:3]) ['张绍刚', '郭麒麟']
print(lis[::-1]) ['灭绝师太', '郭麒麟', '张绍刚', '金毛狮王']
2、索引超过范围会报错
lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]
print(lis[12]) #list index out of range
3、可以用for来进行遍历
lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]
for item in lis:
print(item)
4、可以用len拿到列表的长度
lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]
print(len(lis))
4.2列表的增删改查
向列表添加内容
# append() 追加
lis = []
# append() 追加
lis.append("赵本山")
lis.append("张无忌")
lis.append("海燕")
print(lis) #结果:['赵本山', '张无忌', '海燕']
#insert() 插入
lis = []
lis.append("赵本山")
lis.append("张无忌")
lis.append("海燕")
lis.insert(0,"美女")
print(lis) #结果:['美女', '赵本山', '张无忌', '海燕']
# extend() 可以合并两个列表,批量的添加
lis = ['赵本山', '张无忌', '海燕']
lis.extend(["武则天","嬴政","马超"])
print(lis) # 结果:['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
# pop() 删除
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
ret = lis.pop(3) #给出被删除的索引,返回被删除的元素
print(lis)
print(ret) #结果:武则天
# remove() 删除某个元素
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
lis.remove("马超")
print(lis) #结果:['赵本山', '张无忌', '海燕', '武则天', '嬴政']
# 修改
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
lis[4] = "夏侯惇" #直接用索引就可以修改
print(lis) #结果:['赵本山', '张无忌', '海燕', '武则天', '夏侯惇', '马超']
# 查询
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
print(lis[4]) # 嬴政 直接用索引去查找
4.3 列表的其他操作(补充)
# 排序
lst = [222,333,333,43,56,33,22,11,678]
lst.sort() #对列表进行升序操作
lst.sort(reverse=True) #进行翻转
print(lst) #结果:[678, 333, 333, 222, 56, 43, 33, 22, 11]
# 列表的嵌套
lst = ["abc","def",["呵呵呵","妈妈吗","口你家娃",["可乐",'a','abk',34]]] #取34
print(lst[2][3][3])
#列表的循环删除(*)
安全稳妥的删除方式: 将一个要删除的内容保存在一个新的列表当中,循环新的列表,删除老的列表
lst = ["武则天","嬴政","马超","张无忌","张三"]
temp = []
for item in lst:
if item.startswith("张"): #循环删除姓张的
temp.append(item)
for item in temp:
lst.remove(item)
print(lst) #结果:['武则天', '嬴政', '马超']
5.元组
tuple 元组, 特点:不可变的列表
t = ("张无忌","张三丰")
print(t) # 结果:('张无忌', '张三丰')
print(t[1:3]) # 结果:('张三丰',)
# 你固定了某些数据,不允许外界修改 # 元组如果只有一个元素(*),需要在元素的末尾添加一个逗号。
t = ("哈哈",) #()默认是优先级
print(t) #结果:('哈哈',)
print(type(t)) #结果:<class 'tuple'>
# 关于元组的不可变(坑) 元组里的列表是可变的
t = (1,2,3,["呵呵哒","么么哒"])
t[3].append("哒哒哒")
print(t) #结果:(1, 2, 3, ['呵呵哒', '么么哒', '哒哒哒'])
6.集合
set 集合 集合是无序的
s = {1,2,3,"呵呵"}
print(s) #结果:{1, 2, 3, '呵呵'}
print(type(s)) #结果:<class 'set'>
# 不可哈希:python中的set集合进行数据储存的时候,需要对数据进行哈希计算,根据计算出来的哈希值进行存储数据 # 可哈希: 不可变的数据类型,int str tuple bool # set集合要求储存的数据必须是可以哈希计算的 # 可变的数据类型,list,dict set
# 插入
s = set()
s.add("马牛逼")
s.add("呲花")
print(s) #结果:{'马牛逼', '呲花'}
# 删除
s = {'马牛逼', '呲花'}
s.pop() #弹出最后一个,很少用它,因为没有顺序
print(s) # {'呲花'}
s = {'马牛逼', '呲花'}
s.remove("呲花")
s.add("沈腾")
print(s) #结果:{'马牛逼', '沈腾'}
# 遍历
for item in s:
print(item) #结果:马牛逼 呲花
# 并集,交集,差集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
print(s1 & s2) # 交集 {'皮长山'}
print(s1 | s2) # 并集 {'刘能', '冯乡长', '皮长山', '刘科长', '赵四'}
print(s1 - s2) # 差集 {'刘能', '赵四'}
# 去重复
s1 = {"周杰伦","昆凌","蔡依林","美猴王"}
print(s1) 结果:{'美猴王', '昆凌', '蔡依林', '周杰伦'}
s1.add("周杰伦")
print(s1) 结果:{'美猴王', '昆凌', '蔡依林', '周杰伦'}
7.字典
7.1 字典的特性
# 首先,字典是以键值对的形式进行存储数据的 # 字典的表示方式:{key:value,key2:value,key3:value}
# 字典的key必须是可哈希的数据类型 # 字典的value可以是任何数据类型
dic = {"jay": "周杰伦", "金毛狮王": "谢逊"}
val = dic["jay"]
print(val)
dic = {[]:123}
print(dic) #结果:unhashable type: 'list' 报错
dic = {"汪峰的孩子":["孩子1","孩子2"]}
print(dic) # 结果:{'汪峰的孩子': ['孩子1', '孩子2']}
7.2 字典的增删查改
# 增加
dic = dict()
dic["jay"] = "周杰伦"
dic[1] = 123
print(dic) #结果:{'jay': '周杰伦', 1: 123}
dic = {'jay': '昆凌', 1: 123}
dic.setdefault("tom","胡辣汤") # 设置默认值
print(dic) #结果:{'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}
# 修改
dic = {'jay': '周杰伦', 1: 123}
dic["jay"] = "昆凌"
print(dic) #结果:{'jay': '昆凌', 1: 123}
# 删除
dic = {'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}
dic.pop("jay") # 根据key去删除
print(dic) # 结果:{1: 123, 'tom': '胡辣汤'}
# 查询
dic = {'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}
print(dic["jay"]) #结果:昆凌
print(dic.get("jay")) #结果:昆凌
#例子:
dic = {
"赵四":"特别能歪嘴",
"刘能":"老,老四啊",
"大脚":"根这个和那个搞对象",
"大脑袋":"瞎折腾。。。"
}
name = input("输入你想知道的名字:") #输入:刘能
val = dic.get(name)
print(val) #结果:"老,老四啊"
7.3 字典的进阶操作-循环和嵌套
dic = {
"赵四":"特别能歪嘴",
"刘能":"老,老四啊",
"大脚":"根这个和那个搞对象",
"大脑袋":"瞎折腾。。。"
}
# 1.可以用for循环,直接拿到key
for key in dic:
print(key,dic[key])
#结果:
赵四 特别能歪嘴
刘能 老,老四啊
大脚 根这个和那个搞对象
大脑袋 瞎折腾。。。
# 2.希望所有的key全部保存在一个列表中
print(list(dic.keys())) #拿到所有的key了
# 结果:['赵四', '刘能', '大脚', '大脑袋']
# 3.希望把所有的value都放在一个列表中
print(list(dic.values()))
#结果:['特别能歪嘴', '老,老四啊', '根这个和那个搞对象', '瞎折腾。。。']
# 4.直接拿到字典中的key和value
print(list(dic.items()))
#结果:[('赵四', '特别能歪嘴'), ('刘能', '老,老四啊'), ('大脚', '根这个和那个搞对象'), ('大脑袋', '瞎折腾。。。')]
for key,values in dic.items():
print(key,values)
#结果:
赵四 特别能歪嘴
刘能 老,老四啊
大脚 根这个和那个搞对象
大脑袋 瞎折腾。。。
#嵌套
# 字典的嵌套
wangfeng = {
"name":"汪峰",
"age": "章子怡",
"wife":{
"name":"章子怡",
"hobby":"演戏",
"assistant":{
"name":"樵夫",
"age":"19",
"bobby":"打游戏"
}
},
"children":[
{"name":"孩子1","age":13},
{"name":"孩子1","age":12},
{"name":"孩子1","age":13},
]
}
# # 汪峰妻子的助手的名字
print(wangfeng["wife"]["assistant"]["name"])
# # 给汪峰第二个孩子加一岁
wangfeng["children"][1]["age"] = wangfeng["children"][1]["age"] + 1
print(wangfeng)
# 循环和删除
dic = {
"赵四":"特别能歪嘴",
"刘能":"老,老四啊",
"大脚":"根这个和那个搞对象",
"大脑袋":"瞎折腾。。。"
}
temp = []
for key in dic:
if key.startswith("大"):
temp.append(key)
for t in temp: #循环列表,删除字典中的内容
dic.pop(t)
print(dic)
8.bytes(字节)
1.字符集编码 0 1 《=》 1010101010 =》二进制转化成十进制 《=》 88 电脑如何进行储存文字信息 10000000 =》 a ascii =》 编排了128个文字符号,只需要七个0和1就可以表示了,01111111 =》 byte ansi =》 一套标准,每个字符 16bit,2byte 00000000 01111111 中国,gb2312, gbk编码(windows 默认的就是这个) 16bit 2byte 01000000 01010101 =》中国 unicode: 万国码 utf:是可变长度的unicode,可以进行数据的传输和储存 utf-8:最短的字节长度8 英文: 8bit,1byte 中文: 24bit,3byte utf-16:最短的字节长度16 2.bytes 程序员平时遇见的所有的数据最终单位都是字节byte
# 编码
s = "周杰伦"
bs1 = s.encode("gbk")
bs2 = s.encode("utf-8")
print(bs1) # 结果:b'\xd6\xdc\xbd\xdc\xc2\xd7'
print(bs2) # 结果:b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'
#解码
bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
b = bs.decode("gbk")
print(b) #结果:周杰伦
9.运算符
""" 1. 算数运算 + - * / % // 2. 比较运算 > < >= <= == != 3. 赋值运算 = +=, -=, *=..... a += b a = a + b n = 1 sum = 0 while n <= 100: sum = sum + n # sum += n n = n + 1 # n += 1 4. 逻辑运算 1. and, 并且, 左右两端同时成立. 结果才能成立 2. or, 或者, 左右两端有一个成立. 结果就成立 3. not, 非, 非真既假, 非假既真. 当and和or以及not同时出现的时候. 最好呢. 加上括号. 不会产生歧义或者不易理解的问题 如果没有括号怎么办? 记住运算顺序: 先算括号 > 算not > and > or 5. 成员运算 in 判断xxx是否在xxxx中出现了 not in 判断xxx是否不在xxxx中出现了 """
1. 算数运算
a = 20
b = 3
c = a % b # 10 / 3 = 3.....1
d = a // b
print(c) # 2
print(d) # 6
2.比较运算
a = 20
b = 20
print(a != b) #结果:ture
3.逻辑运算1
#逻辑运算
print(True and True and True and False) #false
print(False or True or False or False) #ture
print( not False) #ture
10.文件操作
""" 1.找到这个文件,打开它 open(文件路径,mode="",encoding=“”) 文件路径: 1.绝对路径 d:/test/xxx.txt 2.相对路径 相对于当你的程序所在的文件夹 ../ 上一层文件夹 mode: r : read 读取 w : write 写 a : append 住家写入 b : 读写的是一个非文本文件 --》 bytes with :上下文,不需要手动去关闭一个文件 """
10.1 打开文件
open("国产.txt")
open("../葫芦娃.txt") # 上一级的文件夹下
open("../01_初识python/课件/06_变量.txt")
10.2 读文件
#读文件
f = open("国产.txt",mode="r",encoding="utf-8")
print(f.read()) # f.read 全部读取
print(f.readline().strip()) #f.readline 读取一行
print(f.readline().strip()) # 去掉字符串左右两端的空白,空格,换行符,制表符
print(f.readlines()) # 一行一行,会读取文件放到列表里
# 最重要的一种文本读取方式(必须掌握)
for line in f:
print(line.strip())
10.3 写入文件
w模式下,如果文件不存在,自动创建一个文件 w模式下,每一次open都会清空掉文件中的内容
f = open("嫩模.txt",mode="w",encoding="utf-8")
f.write("胡辣汤")
f.close() # 每次操作以后最好把链接关闭
lst = ["张无忌","汪峰","赵敏"]
f = open("倚天屠龙记",mode="w",encoding="utf-8")
for item in lst:
f.write(item)
f.write("\n")
结果:
# a模式
# a模式 (在末尾追加)
f = open("打架.txt", mode="a", encoding="utf-8")
f.write("你好厉害")
# with 不用手动close
with open("国产.txt", mode="r", encoding="utf-8") as f: # f = open()
for line in f:
print(line.strip())
# 想要读取图片
# 在读写非文本文件的时候要加上b
with open("yljy.jpeg", mode="rb") as f:
for line in f:
print(line)
结果:
10.4 文件的复制
# 从源文件中读取内容. 写入到新路径去
with open("胡一菲.jpeg", mode="rb") as f1, \
open("../01_初识python/胡二飞.jpeg", mode="wb") as f2:
for line in f1:
f2.write(line)