1、昨日内容回顾
dict: dic = {'name':'alex'} 增加:
dic['age'] = 21 存在就覆盖 dic.setdefault() 没有就增加
删除:
pop()按照key删除,有返回值 clear del dic['name'] popitem()随机删除 返回的是元祖
修改:
update
查询:
dic.keys() dic.values() dic.items() for k,v in dic.items(): print(k,v) dic.get(key,None)
2、作业讲解
3、元素分类
有如下值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 ={} l_greater=[] #大于66的所有值列表 l_less=[] #小于66的所有值列表 for i in li: if i == 66:continue if i > 66 : l_greater.append(i) else : l_less.append(i) dic.setdefault('k1',l_greater) dic.setdefault('k2',l_less) print(dic)
方法二:
li = [11,22,33,44,55,66,77,88,99,90] b = [] #创建空列表b c = [] #创建空列表c for i in li: #循环a列表元素 if i < 66: b.append(i) #判断循环到的元素小于66的,追加到b列表 elif i == 66:pass else: c.append(i) #判断循环到的元素大于66的,追加到c列表 d = {"k1":b, "k2":c} #新创建一个字典,键为k1和k2,把b列表赋值给k1键,把c列表赋值给k2键 print(d) #打印出d字典
4、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", '鼠标垫', '游艇']
要求:1:页面显示 序号 + 商品名称,如:
1 手机
2 电脑
…
2: 用户输入选择的商品序号,然后打印商品名称
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。
方法一:
flag = True while flag: li = ["手机", "电脑", "鼠标垫", "游艇"] for i in li: print('{} {}'.format(li.index(i)+1,i)) num_of_chioce = input('请输入选择的商品序号/输入Q或者q退出程序:') if num_of_chioce.isdigit(): num_of_chioce = int(num_of_chioce) if num_of_chioce > 0 and num_of_chioce <= len(li): print(li[num_of_chioce-1]) else:print('请输入有效数字') elif num_of_chioce.upper() == 'Q':break else:print('请输入数字')
方法二:
li = ["手机", "电脑", '鼠标垫', '游艇'] for i,j in enumerate(li,1): #自定义列表索引下标,从1开始,将列表索引下标赋值给i,将列表值赋值给j print(i,j)#打印出列表的索引下标,和列表的值 a = input("请输入商品序号:") #要求用户输入商品序号 if a.isdigit():#判断用户输入的是否是纯数字 pass else: exit("你输入的不是有效的商品序号")#如果不是纯数字打印提示信息,并且退出程序,不在往下执行 a = int(a) #将用户输入的序号转换成数字类型 b = len(li)#统计li列表的元素个数 if a > 0 and a <= b: #判断 c = li[a-1] print(c) else: print("商品序号不存在")
3、今日内容
(1)、小知识点总结
python2与python3 的区别: (1)宏观上:python2代码混乱,重复代码多 python3代码简洁,去除重复代码 (2)print:python2:支持不加括号,也可以不加() python3:必须加() (3)range:python2:xrange()、range () python3:range() (4)input:python2:raw_input python3:input
=、==、is、id = :赋值 ==:比较值是否相等 is:比较内存地址 id(内容):测出内存地址
小数据池 数字,字符串: 数字的范围:-5 -- 256) 字符串:1.不能含有特殊字符 2.s*20还是同一个地址,S*21及(21以上)为不同地址(s:一个字符) i1 = 6 i2 = 6 print(id(i1),id(i2)) 其他种类:list dict tuple set没有小数据池 # l1 = [1,] # l2 = [1,] # print(l1 is l2) # s = 'alex' # s1 = b'alex' # print(s,type(s)) # print(s1,type(s1)) # s = '中国' # print(s,type(s)) # s1 = b'中国' # print(s1,type(s1))
(2)、python3中的编码
ASCII A:00000010 8位 一个字节 Unicode A :00000000 00000002 00000000 00002200 32位 四个字节 中:00000000 00000002 00000000 00002200 32位 四个字节 utf-8:A :00000010 8位 一个字节 中:00000000 00000002 00000000 24位 三个字节 gbk: A :00000010 8位 一个字节 中:00000000 00000002 16位 两个字节
归纳
1、各个编码之间的二进制,是不能互相识别的,会产生乱码。
2、文件的储存、传输,不能是Unicode,(只能是utf-8,utf-16 ,gb2312,gbk,ASCII)
python3的编码:
str 在内存中是用Unicode编码的。 bytes类型(gbk、gb2312、utf-8) 表现形式: 对于英文: str : 表现形式:s = 'alex' 编码方式: 010101010 unicode bytes : 表现形式:s = b'alex' 编码方式: 000101010 utf-8 gbk。。。。 对于中文: str : 表现形式:s = '中国' 编码方式: 010101010 unicode bytes :表现形式:s = b'xe91e91e01e21e31e32' 编码方式: 000101010 utf-8 gbk。。。。 str不能直接进行储存和传输,需要先转换成bytes类型 str--->bytes #encode:编码
s1 = 'alex' s11 = s1.encode('utf-8') s11 = s1.encode('gbk') print(s11) s2 = '中国' s22 = s2.encode('utf-8') s22 = s2.encode('gbk') print(s22)