一、上节回顾
字典:dic = {'name':'alex'}
1,增
dic['k'] = 'v'
有键值对,则覆盖
setdefault 有键值对,不添加
dic.setdefault('k1','v1') 可以
dic.setdefault('name','barry')
2,删
pop dic.pop('name') 有返回值,返回得是对应的值
dic.pop('k2',None)
dic.popitem()随机删除
del dic['name']
del dic
clear 清空
3,改
dic['name'] = 'v'
dic = {'name':'alex'}
dic2 = {'name':'barry','age':18}
dic.update(dic2)
print(dic) {'name':'barry','age':18}
print(dic2) {'name':'barry','age':18}
a,b = [1,2]
print(a,b) # 1,2
a = 1
b = 2
a,b=b,a
4,查
print(dic.keys())
print(dic.values())
print(dic.items()) # for k,v in dic.items():
#以上三个 都可以for循环
dic['name']
dic.get('name')
二、作业收藏
enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
a = 'abcdefg' for i in enumerate(a,1): print(i) # (1, 'a') # (2, 'b') # (3, 'c') # (4, 'd') # (5, 'e') # (6, 'f') # (7, 'g') 输出索引和元素值 a = {(1,2):2,3:4} for i in enumerate(a): print(i) # 如果是字典输出 数字和key值 # 默认结果是元组
有如下值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) # elif i < 66: # dic['k2'].append(i) # print(dic) ''' 4、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] 要求:1:页面显示 序号 + 商品名称,如: 1 手机 2 电脑 … 2: 用户输入选择的商品序号,然后打印商品名称 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 4:用户输入Q或者q,退出程序。 ''' li = ["手机", "电脑", "鼠标垫", "游艇"] # print(li[2]) # while True: # for i in li: # print('{} {}'.format(li.index(i)+1,i)) while True: for index,i in enumerate(li,1): print('{} {}'.format(index,i)) choice_goods = input('请输入商品序号(输入Q或者q退出程序):').strip() # 去空格 if choice_goods.isdigit(): # 全都是数字组成的字符串 choice_goods = int(choice_goods) if (choice_goods > 0) and (choice_goods <= len(li)): print(li[choice_goods-1]) else:print('请输入有效范围内的序号') elif choice_goods.upper() == 'Q':break else:print('请输入数字')
三、今日内容
id() (is == 区别)
#ID is id()用于查看 一个变量或者一个值在内存中的地址 #int 中 -5---256 之间的数字不同变量内存地址是一样的 str中 不含空格或者特殊字符的变量内存地址一样 含空格或其他特殊字符的不一样 #{},[],(),range set 等 这些可变的他们的内存地址是不一样的 #is 是用来比较两个内存地址是否相等的 s =[] s1 = [] print(s is s1) # False s = -5 s1 = -5 print(s is s1) # True s = -6 s1 = -6 print(s is s1) # F s =256 s1 = 256 print(s is s1) # True s = 257 s1 = 257 print(s is s1) # F s = 'asdfghjk' s1 = 'asdfghjk' print(s is s1) # True s = 'asdfghjk ' s1 = 'asdfghjk ' print(s is s1) # F s = 'asdfgh+jk' s1 = 'asdfgh+jk' print(s is s1) # F
四、编码。
Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象.{字符串有的功能bytes都有}
Bytes 对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。我们可以通过调用 bytes() 类(没错,它是类,不是函数)生成 bytes 实例,其值形式为 b'xxxxx',其中 'xxxxx' 为一至多个转义的十六进制字符串(单个 x 的形式为:xHH,其中 x 为小写的十六进制转义字符,HH 为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围 0-255),对于同一个字符串如果采用不同的编码方式生成 bytes 对象,就会形成不同的值:
a = '张' b = 'abcdefg' n = bytes(b,'utf-8') n1 = bytes(a,'utf-8') print(n,n1) # b'abcdefg' b'xe5xbcxa0' >>x为16进制转义符 xe 代表一个字节 n3 = a.encode('gbk') n4 = b.encode('gbk') print(n3,n4) # b'xd5xc5' b'abcdefg'
py3:
举例: unicode A :00000000 00000000 00000000 00001001 四个字节
中 :00000000 00001000 00000000 00000001 四个字节
utf-8 A :00000001 一个字节
欧洲@ : 00000010 00000001 两个字节
亚洲 中 : 00001000 00000000 00000001 三个字节
中国:00001000 00000000 00000001 00001001 00000000 00000001
gbk A :00000000 00001001 一个字节
中 :00000000 00100001 两个字节
不同的编码之间是不能相互识别,会产生乱码。
存储,传输的:utf-8,或者 gbk,或者是gb2312,或者是其他(绝对不是unicode)。
......