1.is和==的区别
1)==比较的是左右两边的值,无论是字符串、数字、列表,元组、若两边的值相等,则返回True
a = "zdz"
b = "zdz"
print(a==b)
输出:
True
View Code
②列表:若两个列表元素相同,则返回True 若不相同,返回False
li = [1,2,4]
li_2 = [1,2,4]
print(li==li_2)
输出:
True
2) is 是比较:比较的是内存地址
补充:id是python中的内置函数,用来打印对象内存地址
a = "zdz"
print(id(a))
输出:
1673496780448
View Code
①字符串
str_1 = "zdz"
str_2 = "zdz"
print(str_1 is str_2)
输出:
True
View Code
②数字
num1 = 10
num2 = 10
print(num1 is num2)
输出:
True
View Code
③列表
list_1 = [1,2,3]
list_2 = [1,2,3]
print(list_1 is list_2)
输出:
False
View Code
④元组
tup_1 = (1,2,3)
tup_2 = (1,2,3)
print(tup_1 is tup_2)
输出:
False
⑤字典
dic_1 = {'1':"zdz",'2':"zzm"}
dic_2 = {'1':"zdz",'2':"zzm"}
print(dic_1 is dic_2 )
输出:
False
总结:
1)==比较左右两边的值
2)is 比较的是内存地址,通过id()内置函数比较
一个py文件中所有相同的字符串,一般都是使用一样的内存地址
2.小数据池
只适用于数字和字符串,在小数据池中的数据内存地址相同(在终端测试正常,在pycharm会改变这个规则)
①数字小数据池范围:-5~256
②字符串小数据池范围:字符产中如果有特殊字符(空格、加减乘除等),内存地址就不一样(终端测试正常,pycharm中会改变该规则)
#字符串中单个*20以为的内存地址一样;单个*21以上内存地址不一致
a = 'a' * 20
b = 'a' * 20
print(a is b)
输出:
True
==================================
a = 'a' * 21
b = 'a' * 21
print(a is b)
输出:
False
View Code
3.编码和解码
1)常见编码
①ascii码:不支持中文,支持英文,数字,字母,符号;8位,即一个字节
②GBK码:支持中文,英文,数字,符号;英文和中文都占16位,即2个字节
③unicode:万国码:支持中文,英文,数字,符号;英文和中文都占32位,即4字节
④utf-8长度可变的外国码:最少用8位,英文占8位,中文占24位,即3个字节
注:python2的默认编码为ascii;python3的默认编码为utf-8;python3中,在程序运行阶段,使用的是unicode编码(即unicode是一个桥梁);unicode是不可以做文件传输和存储的;所有的传输和存储都是使用bytes;pycharm存储的时候默认使用的是utf-8
2)编码(encode):即拿到明文编码后对应的字节
s = "lpl"
print(s.encode('utf-8')) #指定要编码成什么样的编码类型
输出:
b'lpl'
View Code
#中文
s = "吃了吗"
print(s.encode('utf-8')) #指定要编码成什么样的编码类型
输出:
b'\xe5\x90\x83\xe4\xba\x86\xe5\x90\x97' #一个字三个字节(文件存储时,存在硬盘中的就是类似这样的数据)
View Code
2)解码(decode):用什么编码方式编码,就要用什么编码方式解码,否则解码报错或者解码后的字符乱码;即将编码后的字节编码成对应的明文
s = "吃了"
s1 = s.encode('utf-8')
print(s1)
print(s1.decode("gbk"))
print(s1.decode("utf-8"))
输出:
b'\xe5\x90\x83\xe4\xba\x86'
鍚冧簡
吃了
View Code
编码和解码的本质:通过unicode这个桥梁,进行编码和解码
4.练习
1)好声音大赛评委打分时,可以进行输入,假设有10个评委,让10个评委进行打分,要求,分树必须大于5分,小于10分
i =1
while i <= 10:
score = input("请%d号评委打分:"%i)
if int(score) > 5 and int(score) < 10:
print("分数合理")
else:
print("分数不合理")
continue
i = i + 1
输出:
请1号评委打分:1
分数不合理
请1号评委打分:8
View Code
2)电影投票:程序先给出一个目前正在上映的电影列表,由用户给每一个电影打分,最终将该用户投票信息公布出来lst=['烈日灼心','美国往事','西西里的美丽传说','憨豆先生'],最终结果如下:{'烈日灼心':88,'美国往事':85,'西西里的美丽传说':90,'憨豆先生':89}
lst=['烈日灼心','美国往事','西西里的美丽传说','憨豆先生']
dic={}
for i in lst:
score = input("请给%s打分:" % i)
dic[i] = score
print(dic)
输出:
请给烈日灼心打分:88
请给美国往事打分:85
请给西西里的美丽传说打分:90
请给憨豆先生打分:89
{'美国往事': '85', '西西里的美丽传说': '90', '烈日灼心': '88', '憨豆先生': '89'}
View Code
3)念数字:给出一个字典,在字典中表示2每个数字的发音,包括相关符号,然后由用户输入一个数字,让程序读出相应的读音(不需要语音输出,单纯的打印即可)
dic = {
'-':"fu",
'1':"yi",
'2':"er",
'3':"san",
'4':"si",
'5':"wu",
'6':"liu",
'7':"qi",
'8':"ba",
'9':"jiu"
}
num = input("请输入一个数字:")
for i in num:
print(dic[i],end=" ") #用空格分割每一个元素
else:
print() #换行
print("输入完毕")
输出:
请输入一个数字:127
yi er qi
输入完毕
View Code
4)现有主播的收益信息,按照要求,完成相应操作:
zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':'200000','老贼':188888}
①计算主播的平均收益
zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':200000,'老贼':188888}
sum = 0
for value in zhubo.values():
sum = sum + value
print(sum/len(zhubo)) #计算平均值
输出:
175221.75
View Code
②干掉收益小于平均值的主播
zhubo = {'卢本伟':122000,'冯提莫':189999,'PDD':200000,'老贼':188888}
sum = 0
for value in zhubo.values():
sum = sum + value
print(sum/len(zhubo)) #计算平均值
avg = sum/len(zhubo)
#循环的时候记录要删除的key
#注:字典循环的时候,不允许修改被迭代的元素,所以先将key放入到列表中
lst = []
for k,v in zhubo.items():
if v < avg:
lst.append(k) #列表保存要删除的key
for i in lst:
zhubo.pop(i)
print(zhubo)
输出:
175221.75
{'老贼': 188888, '冯提莫': 189999, 'PDD': 200000}
View Code
③干掉卢本伟
zhubo.pop('卢本伟')
总结:
1)==比较左右两边的值
2)is 比较的是内存地址,通过id()内置函数比较
一个py文件中所有相同的字符串,一般都是使用一样的内存地址