python基础数据类型四(id,is ,小数据池,编码)
id 查询内存地址。
name = 'alex'
print(id(name))
name1 = 'alex'
name2 = 'alex'
print(name1 == name2)
= 赋值运算 == 比较数值相同
is 内存地址是否相同
小数据池,int str 在一定 范围内,如果两个数值相同,为了节省内存,会用一个内存地址’
int -5--256
str 有非字母元素就不是小数据池
单个字母*int<21有小数据池
剩下的类型都不存在
编码:
ASCII: 一个字符 1个字节表示(8位),数字字母特殊字符。
unicode:万国码
一个字符用四个字节表示》
A:0000 0001 0000 0001 0000 0001 0000 0001
中:0000 0001 0000 0001 0000 1001 0000 0001
utf-8:
a: 0000
欧洲:0000 0001 0100 0001
亚洲:0000 0001 0000 0001 1100 0001
gbk:国标
a:0001 0001
中:0000 0001 0000 0001
1.不同密码本之间的二进制是不能相互是别的,容易报错或者乱码
2.计算机文件的储存和传输都是1010110,(gbk,gbk2312,ASCII,utf-8等等)不能是unicode
大前提, python3x ,编码
数据类型
int
str
bytes str有的所有的方法,bites都有
bool
list
tupe
dic
set
python3x
str:内部编码方式 unicode。
bytes:内部编码方式 非unicode。
英文:
str: 内部编码方式 unicode
表现形式:name = 'alex'
bytes: 内部编码方式 非unicode
表现形式:name = b'alex'
中文:
str: 内部编码方式 unicode
表现形式:name = '中国'
bytes: 内部编码方式 非unicode
表现形式:name = b'\xe2\xe2\xe2\xe2\xe2\xe2'
with open('02 作业讲解.py',encoding='utf-8') as f1:
print(f1.read(),type(f1.read()))
name='alex'
name1=b'alex'
print(name,type(name))
print(name1,type(name1))#<class 'bytes'>
name='中国'.encode('utf-8') #<class 'bytes'>转化为编码方式为utf-8的bytes类型
name1=b'alex'
print(name,type(name)) # b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
print(name1,type(name1)) # b'alex' <class 'bytes'>
str-->bytes
s1='中国' #编码方式为unicode
b1=s1.encode('utf-8')#b'\xe4\xb8\xad\xe5\x9b\xbd' encode 编码
b2=s1.encode('gbk')#b'\xd6\xd0\xb9\xfa'
print(b1,type(b1))#<class 'bytes'>
print(b2,type(b2))#<class 'bytes'>
s2=b1.decode('utf-8')#中国 decode解码,用什么编码,就用解码
s3=b2.decode('gbk')#中国
print(s2,type(s2))#<class 'str'>
print(s3,type(s3))#<class 'str'>
utf-8 bytes-->gbk bytes
s1=b'alex'
print(s1.capitalize()) #str的所有方法都适用于bytes
str ---> bytes
b1 = '中国'.encode('utf-8')
print(b1,type(b1))
bytes ---> str
s1 = b1.decode('utf-8')
print(s1,type(s1))
b2 = s1.encode('utf-8')
print(b2,type(b2))
utf-8 bytes --->gbk bytes
s2 = b1.decode('utf-8')
print(s2,type(s2))
b2 = s2.encode('gbk')
print(b2,type(b2))
s3=b2.decode('gbk')
print(s3)
tast
1,有如下变量(tu是个元祖),请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
a. 讲述元祖的特性
只读列表,不可进行增删改,只能查询
b. 请问tu变量中的第一个元素 “aaa” 是否可被修改?
否
c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
字典,可以
tu[-1][-2]['k2'].append('Seven')
print(tu)
d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
元祖,不可以
2, 字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
a. 请循环输出所有的key
for key in dic.keys():
print(key)
b. 请循环输出所有的value
for value in dic.values():
print(value)
c. 请循环输出所有的key和value
for k,v in dic.items():
print(k,v)
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic['k4']='V4'
dic.setdefault('k4','v4')
print(dic)
e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典
dic['k1']='alex'
print(dic)
f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic['k3'].append(44)
print(dic)
g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic['k3'].insert(0,18)
print(dic)
3,
av_catalog = { "欧美":{ "www.youporn.com": ["很多免费的,世界最大的","质量一般"], "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"] }, "日韩":{ "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"] }, "大陆":{ "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] } }
# 1,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。
av_catalog['欧美']['www.youporn.com'].insert(1,'量很大')
print(av_catalog)
# 2,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
av_catalog['欧美']['x-art.com'].remove('全部收费,屌丝请绕过')
av_catalog['欧美']['x-art.com'].pop(1)
del av_catalog['欧美']['x-art.com'][1]
print(av_catalog)
# 3,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
# 4,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。#一定要复习之前的内容
av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].upper()
print(av_catalog)
# 5,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
av_catalog['大陆']['1048']=['一天就封了']
av_catalog['大陆'].setdefault('1048','一天就封了')
print(av_catalog)
# 6,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。
del av_catalog['欧美']['letmedothistoyou.com']
av_catalog['欧美'].pop('letmedothistoyou.com','没有此值')
print(av_catalog)
# 7,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
av_catalog['大陆']['1024']='全部免费,真好,好人一生平安,可以爬下来'
print(av_catalog)
4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}#考试题
l='k:1|k1:2|k2:3|k3:4'.split('|')#['k:1', 'k1:2', 'k2:3', 'k3:4']
dic={}
for i in l:
dic[i.split(':')[0]]=int(i.split(':')[1])#不要想一步到位,理清思路,从概念上去解决他
print(dic)
5、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,
将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
li= [11,22,33,44,55,66,77,88,99,90]
dic={'k1':[],'k2':[]}
for i in li:
if i>66:
dic['k1'].append(i)
else:
dic['k2'].append(i)
print(dic)
6、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", '鼠标垫', '游艇']
要求:1:页面显示 序号 + 商品名称,如:
1 手机
2 电脑
…
2: 用户输入选择的商品序号,然后打印商品名称
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。
l = input('1手机\n2电脑 \n3鼠标垫\n4游艇\n请输入你的选择:输入Q或者q,退出程序').strip()#太low
dic={'手机':1,'电脑':2,'鼠标垫':3,'游艇':4}#自己方向错了
while True:
li = ["手机", "电脑", '鼠标垫', '游艇']
for i in range(len(li)):
print('{}\t{}'.format (i+1,li[i]))
# print('%d \t %s' % (i+1,li[i]))#数据转化时麻烦
# for i in li:
# print('{}\t{}'.format (int(li.index(i)) + 1,i ))格式化输出时麻烦,所以不建议用for i in li
s = input('请输入你的选择:输入Q或者q,退出程序').strip()
if s.upper() == 'Q':
print('欢迎使用')
break
# flag = False
elif s.isdigit():
s=int(s)
if s > 0 and s < 5:
print('您选择的商品是: %s' % li[s - 1]) #内容要经常复习
pass
'''
输入总资产,与商品价格作比较,能买就添加到购物车,
不能买,告知用户余额不足,将余额打印出来
'''
else:
print('你选择的序号有误,请重新输入')
else:
print('你输入的含有非数字字符,请重新输入')
重点:
li = ["苍老师","东京热","武藤兰","波多野结衣"]
l1 = []
comment = input('请输入评论>>>')
for i in li:
if i in comment:
comment = comment.replace(i,'*'*len(i))
l1.append(comment)
print(l1)