巨蟒python全栈开发-第5天 字典集合
今日大纲:
1.什么是字典
字典是以key:value的形式来保存数据,用{}表示. 存储的是key:value
2.字典的增删改查(重点)
(1) 添加
dic[新key] = 值
setdefault()
(2)删除
pop(key)
del dict[key]
popitem()
clear()
(3)修改
dic[老key] = 新值
d1.update(d2) 把d2的键值对更新到d1中
(4)查询
dic[key]
get(key, 值) #推荐用法
setdefault(key, value)
(5) 遍历,字典是一个可迭代对象
3.字典的相关操作
(1) keys() 获取到所有的键的集合(高仿列表)
(2) values() 获取到所有的值的集合
(3)items() 拿到所有的键值对 元组形式
(4)解构:
a,b=(1,2)
a,b=1,2
4.字典的嵌套
字典的嵌套. 字典套字典
5.集合(非重点),核心功能:去重复
DAY5-基本数据类型(dict&set)
本节主要内容:
1.字典的简单介绍
2.字典的增删改查及其他操作
3.字典的遍历
4.字典的嵌套
5.set集合
一.字典的简单介绍
字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就一位这不可变,这个是 这个是为了能准确的计算内存地址而规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据.
dic={}print(type(dic)) #<class 'dict'>(1)#查找,通过列表引入字典lst=['周杰伦','林俊杰','蔡依林'] #lst[0]总结:字典是自定义下标的列表 dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}print(dic['jay']) #查找 周杰伦(2)修改dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}dic['jay']='马化腾' #修改键jay对应的值print(dic) #结果{'jay': '马化腾', 'jj': '林俊杰', 'jolin': '蔡依林'}(3)应用,在手机袋子的查找手机,通过标签寻找'''字典的查找效率比较高坑: a.字典存储数据的时候是用hash值来存储的,知道hash是个NB的算法就行了 b.算法不能变(python的),数据必须是不可变的(可哈希)算法对应相同的值,对于结果对'键'进行运算,计算出一个值来,下次再算,下次还是这个值'''(4)总结: 列表是可变的,不可哈希的 元组是不可变的,可哈希的 字典的键必须是可哈希的 print(hash(123)) #结果产生的hash值:123 print(hash('胡辣汤')) print((1,2,3))(5)dic={'jay':'周杰伦','王力宏':['龙的传人','唯一','改变自己'],['战狼','战狼2']:'武警'}print(dic)结果报错:TypeError: unhashable type: 'list'总结字典不能作为"键
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据
二.字典的增删改查及其他操作
(1)增加 dic[新键]=新值dic[老键]=新值 dic={'意大利':'李云龙','美国':'美国往事'}dic['日本']='东京审判' #新key表示添加dic['韩国']='釜山行'dic['美国']="华尔街之狼" #更新print(dic) 增加 setdefault(难点)总结: 有添加的功能,如果key是存在的,不添加 流程:判断你给的key是否在字典中存在了,如果已经存在了,则不再新增,不存在,则添加
dic={'意大利':'李云龙','美国':'美国往事'} dic.setdefault('印度') #只有键,值显示 None print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None} dic.setdefault('印度','三傻大闹宝莱坞') #即使是空值也不重新赋值 print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None} dic.setdefault('美国','三傻大闹宝莱坞') print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
总结:即使一用setdefault开始创建没有添加值,利用setdefault再次添加也不会更新新的值.(2)删除 pop/popitem/del/clear
dic={'张艺谋':'红高粱','李安':'断背山','陈凯歌':'霸王别姬','郭德纲':'祖宗十九代'} 方法一 dic.pop('郭德纲') #重点 需要记住的 print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山', '陈凯歌': '霸王别姬'} 方法二 dic.popitem() #现在python3.6是删除最后一个,python3.5以前随机删除 ,在Python早期,字典的无序的 print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山'} 方法三 del dic['李安'] print(dic) #结果: {'张艺谋': '红高粱'} dic.clear() #清空 print(dic) #结果: {}
(3)#修改 dic[新键]=新值 update
dic={'河南':'胡辣汤','开封':'灌汤包','武汉':'热干面'} dic['河南']='烩面' #总结:老key=新值 print(dic) #{'河南': '烩面', '开封': '灌汤包', '武汉': '热干面'} update dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'} dic2={'赵四':'宝宝','刘能':'萌萌','皮校长':'皮长山'} dic1.update(dic2) print(dic1) #dic2把dic1更新 结果:{'赵四': '宝宝', '刘能': '萌萌', '王木生': '范伟', '皮校长': '皮长山'} print(dic2) #dic2不变 结果:{'赵四': '宝宝', '刘能': '萌萌', '皮校长': '皮长山'}
小结:update有相同的键,就把原来的值更新,但是不常用 (4)查找
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'} a. 直接使用key就可以拿到value dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'} print(dic1['赵四']) #结果:刘小光 print(dic1['赵四四']) #KeyError: '赵四四' key不存在 b. get(key) dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'} print(dic1.get('刘能')) #结果:王晓利 print(dic1.get('刘能能')) #结果:None 当key不存在返回None print(dic1.get('刘能能','没有这个人')) #结果:当key不存在,返回第二个参数,默认第二个参数是None#结果:没有这个人 c. setdefault()
setdefault() 第一个功能是添加(当key不存在),第二个功能是查询(根据你给的key查询)整个执行流程:判断给的key是否存在,如果key存在,就不执行新增流程,直接查询出这个key对应的value如果key不存在,先执行新增操作,再使用key把对应的value查询出来
例一dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}ret=dic1.setdefault('皮长山','皮校长')print(ret) #结果:皮校长 #先找再查 例二dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}ret=dic1.setdefault('王木生','宝宝')print(ret) #结果:范伟 #先找再查
三.字典的遍历
(1)for循环遍历字典A.dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}直接用for循环 for key in dic: #直接循环字典拿到的是key,有key直接拿value print(key) print(dic[key]) 结果: 赵四 刘小光 刘能 王晓利 王木生 范伟B.dic={'赵四':'刘晓光','刘能':'王晓利','王木生':'范伟'}直接for循环 for key in dic: #直接循环字典拿到的是key,有key直接拿value print(key,dic[key]) #打印出来的是:键和值 结果: 赵四 刘小光 刘能 王晓利 王木生 范伟(2)A:不常用,上边有一个更简单的,直接用dicdic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}print(dic.keys()) #dict_keys(['赵四', '刘能', '王木生']) ,像列表,是山寨列表,高仿列表for el in dic.keys(): #循环,可以获取到每一个key print(el)结果: 赵四 刘能 王木生B:dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}当只需要值的时候for v in dic.values(): print(v)结果: 刘小光 王晓利 范伟C:dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}print(dic.values()) #结果:dict_values(['刘小光', '王晓利', '范伟'])print(dic.keys()) #结果:dict_keys(['赵四', '刘能', '王木生'])print(dic.items()) #结果:dict_items([('赵四', '刘小光'), ('刘能', '王晓利'), ('王木生', '范伟')])D:dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}for item in dic.items(): print(item) #元组类型 k=item[0] v=item[1] print(k,v) 结果: ('赵四', '刘小光') 赵四 刘小光 ('刘能', '王晓利') 刘能 王晓利 ('王木生', '范伟') 王木生 范伟E:dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}for k,v in dic.items(): print(k,v) 结果: 赵四 刘小光 刘能 王晓利 王木生 范伟(3)a,b=1,2 #解构,解包print(a)print(b) c=1,2,3print(c) #1,2,3print(type(c)) #<class 'tuple'>
d=(1,2,3) #没有解包,直接创建一个元组print(d) 支持解包的类型: list,tuple(4)遍历字典的最简单的方法(最高效的方法)#for k,v in dic.items(): dic={'周五':'等着放假','周六':'放假','周日':'等着上课'}a.直接用for循环遍历字典的keyfor k in dic: #k直接拿到的是key print(k,dic[k]) b.使用dic.items() 解构可以直接拿到k,v,也就是键和值for k,v in dic.items(): print(k,v)
四.字典的嵌套
题目
wf={'name':'汪峰','age':52,'hobby':['唱歌','上头条','穿皮库'],'wife':{'name':'章子怡','age':49,'hobby':['演戏','上电视','当导师'],'tishen':{'name':'萌萌','age':28},'zhuli':{'name':'磊磊','age':20}},'zhuli':{'name':'宝宝','age':23,'hobby':['抽烟','喝酒','烫头']},'children':[{'name':'汪老大'},{'name':'汪老二'}] }
View Code
练习题:
汪峰第二个孩子的年龄 wf['children'][1]['age']=2 print(wf) (1)汪峰助理的名字 print(wf['zhuli']['name']) (2)汪峰老婆的替身的名字 print(wf['wife']['tishen']['name']) (3)汪峰老婆的第二个爱好 print(wf['wife']['hobby'][1]) (4)汪峰助理的第三个爱好 print(wf['zhuli']['hobby'][2]) (5)给汪峰的助理+10岁 #(两种方法) wf['zhuli']['age']=wf['zhuli']['age']+10 wf['zhuli']['age']=33 print(wf) (6)汪峰的老婆添加一个爱好('导戏) wf['wife']['hobby'].append('导戏') wf['wife']['hobby'].extend('导戏') #错误方法,这个是迭代添加 '当导师', '导戏', '导', '戏' print(wf) (7)删除汪峰助理的'抽烟'爱好 (三种删除方法) wf['zhuli']['hobby'].remove('抽烟') wf['zhuli']['hobby'].pop(0) #注意pop指定的是索引 del wf['zhuli']['hobby'][0] print(wf)
五.set集合
(1)运行之后,是无序的 s={'周润发','大润发','王润发','周润发'} #去重,留下不重复的 print(s)(2)把列表转化成集合 x 转化成y类型 y()
唯一能用到的点,去重复lst = ["麻将", "牌九", "骰子", "扑克", "虎机", "骰子", "扑克", "虎机", "扑克", "虎机", "扑克", "虎机"]s=set(lst)print(s) #把集合编绘列表
lst=list(s)print(lst) #顺序是乱的,但是对比它的优点,是可以忽略的(3)计算机中麻烦的事情 1.去重 2.排序
(4)
了解 集合的增删改查就行,不需要记忆 可以用石墨文档//印象笔记 A.增加 s={'小米','华为','vivo'} s.add('oppo') #非要记,就记这个就行了 print(s)s.update('冬瓜') #迭代添加 print(s) B.删 s={'小米','华为','vivo'} ret=s.pop() #随机删除一个 print(s) #剩下的集合 print(ret) #删除的元素 s.remove('小米') #指定删除 print(s) 重点记忆:集合和字典,都是没有索引和切片的,因为两者内部都是乱序的 s.clear() #清空 print(s)C.改 修改,先删除,再添加 把小米改成J罗 s={'小米','华为','vivo'} s.remove('小米') s.add('J罗') print(s)for el in s:print(el) #迭代打印
(5)数学运算s1={1,2,3}s2={1,2,4} 交集 &与字符print(s1&s2)print(s1.intersection(s2)) 并集print(s1|s2)print(s1.union(s2)) 差集print(s1-s2) #s1中特有的内容print(s1.difference(s2)) 反交集print(s1^s2) #两个集合中特有的内容print(s1.symmetric_difference(s2))反交集是什么?例如:集合A={0,1,2,3},集合B={2,3}那么集合A和集合B的交集就是{2,3}集合A和集合B的反交集就是{0,1} (6)集合本身是可变的数据类型,不可哈希集合套集合->不能相互嵌套的集合中的元素必须可哈希(不可变的)s={123} #<冰雪奇缘>如果非要集合套集合s=frozenset({'哈哈','呵呵'}) #不可变的数据类型(集合)print(s)验证for el in s: print(el)(7)关于set集合作业:写一个彩票开奖(36选7)什么时候够7个就结束怎么产生随机数 #题目解法答案:
from random import randint l=set() # print(type(l)) #查看l的数据类型 for i in range(100):k=randint(1,36) #randint是在一个自定义范围内产生随机整数,# print(randint(1,36)) l.add(k)if len(l)==7: #生成7个不重复的代码3break print(l,i) #最后显示,添加集合的结果,一共随机了几个数
View Code
(8)预习 深浅拷贝 小数据池;是干嘛的,小数据池存在的意义 文件操作(带来的作业会很多) 开讲-函数: 第一次考试:从开始到文件操作 下周:函数 f(x)=x+1 f(1)=2 难点:多线程,多线程之后是一马平川 不只是多线程,还有多进程,单线程,单进程,协程等等
今日作业
# 1,有如下变量(tu是个元祖),请实现要求的功能# tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])# a.讲述元祖的特性'''不可更改的数据类型,有序'''# b.请问tu变量中的第一个元素, "alex",是否可被修改?'''tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])tu[0]=1print(tu)#TypeError: 'tuple' object does not support item assignment上边案例说明,tu是不可变数据类型,第一层元素的第一个元素是不可以更改的#字符串不可变#元组第一层不可变''' # c.请问tu变量中的"k2"# 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven"'''(1)对应的是列表类型(list)(2)是可以被修改的(3)tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])tu[1][2]['k2'].append('Seven')print(tu)''' # d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven" '''(1)元组(2)不可以被修改(3)#强行转也是可以的tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])tu[1][2]['k3'].append('Seven')print(tu)#结果报错:AttributeError: 'tuple' object has no attribute 'append'''' 2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# a.请循环输出所有的key ''' dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} #方法一 # for i in dic: # print(i) #方法二: # for i in dic.keys(): # print(i) ''' # b.请循环输出所有的value ''' dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # 方法一 for i in dic:print(dic[i]) # 方法二: for i in dic.keys():print(dic[i]) ''' # c.请循环输出所有的key和value ''' #方法一: dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} for i in dic:print(i,dic[i]) #方法二: for k,v in dic.items():print(k,v) ''' # d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 ''' dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # 方法一: # dic['k4']='v4' # print(dic) #方法二 # dic.setdefault('k4','v4') # print(dic) '''# e.请在修改字典中"k1"对应的值为"alex",输出修改后的字典 ''' #方法一: dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} dic['k1']='alex' print(dic) # 方法二 dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} dic1={'k1':'alex'} dic.update(dic1) print(dic) '''# f.请在k3对应的值中追加一个元素44,输出修改后的字典 ''' dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} dic['k3'].append(44) print(dic) ''' # g.请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典 ''' dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # dic['k3'].insert(1,'18') dic['k3'].insert(0,'18') print(dic)
View Code
3,
av_catalog = {"欧美": {"www.youporn.com": ["很多免费的,世界最大的", "质量一般"],"www.pornhub.com": ["很多免费的,也很大", "质量比yourporn高点"],"letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"],"x-art.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"]},"日韩": {"tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]},"大陆": {"1024": ["全部免费,真好,好人一生平安", "服务器在国外,慢"]} }
View Code
# a, 给此["很多免费的,世界最大的", "质量一般"]列表第二个位置插入一个元素:'量很大'。 #注意这个插入的方法的应用 av_catalog['欧美']["www.youporn.com"].insert(1,'量很大') print(av_catalog) # b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表的"全部收费,屌丝请绕过"删除。 #方法:del remove pop#方法一 # av_catalog['欧美']["x-art.com"].pop() # print(av_catalog) #方法二: # del av_catalog['欧美']["x-art.com"][1] # print(av_catalog) # 方法三: # av_catalog['欧美']["x-art.com"].pop(1) # print(av_catalog) #方法四: # av_catalog['欧美']["x-art.com"].remove("全部收费,屌丝请绕过") # print(av_catalog) ''' # c, 在此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。 ''' #方法一 # av_catalog['欧美']['x-art.com'].append('金老板最喜欢这个') # print(av_catalog) #方法二 # av_catalog['欧美']['x-art.com'].insert(-1,'金老板最喜欢这个') # print(av_catalog) ''' # d, 将此["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]列表的"verygood"全部变成大写。 ''' #方法一 # av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].upper() # print(av_catalog) #方法二 # av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].swapcase() # print(av_catalog) # 方法三 # av_catalog['日韩']['tokyo-hot'][-1]='VERYGOOD' # print(av_catalog) #方法四 # av_catalog['日韩']['tokyo-hot'][1]='VERYGOOD' # print(av_catalog) ''' # e, 给'大陆'对应的字典添加一个键值对 '1048': ['一天就封了'] ''' #方法一 # av_catalog['大陆']['1048']='一天就封了' # print(av_catalog) # 方法二 # av_catalog['大陆'].setdefault('1048','一天就封了') # print(av_catalog) ''' # f, 删除此 "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"]键值对。 ''' #pop和del 可以指定删除字典 # 方法一 # av_catalog['欧美'].pop('letmedothistoyou.com') # print(av_catalog) #方法二 # del av_catalog['欧美']['letmedothistoyou.com'] # print(av_catalog) ''' # g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' ''' #方法一;在最前面添加一个元素"可以爬下来" # av_catalog['大陆']['1024'].insert(0,'可以爬下来') # print(av_catalog) #方法二1:#在第一个元素的后面添加 # av_catalog['大陆']['1024'][0]=av_catalog['大陆']['1024'][0]+'可以爬下来' # print(av_catalog) #方法二2: av_catalog['大陆']['1024'][0]='全部免费,真好,好人一生平安可以爬下来' print(av_catalog)
4、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k': 1, 'k1': 2....}(升级题)
#方法一: # dic={} # s="k:1|k1:2|k2:3|k3:4" # s=s.split("|") # print(s) # for i in s: # a,b=i.split(':') # dic[a]=int(b) # print(dic)#方法二 # dic={} # s="k:1|k1:2|k2:3|k3:4" # s=s.split("|") # print(s) # for i in s: # a=i.split(':') # dic[a[0]]=int(a[1]) # print(dic)
View Code
5、元素分类 有如下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于66的值保存至字典的第一个key中,将小于66 的值保存至第二个key的值中。 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表} 方法一
s={'k1':[],'k2':[]}li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]for i in li:if i>66:s['k1'].append(i)elif i<66:s['k2'].append(i)else:continueprint(s)
View Code
方法二
s={}li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]for i in li:if i>66:s.setdefault('k1',[]).append(i)elif i<66:s.setdefault('k2',[]).append(i)else:continueprint(s)
6、输出商品列表,用户输入序号,显示用户选中的商品(升级题)商品列表: goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] 要求: 1:页面显示 序号 + 商品名称 + 商品价格,如: 1 电脑 1999 2 鼠标 10 … 2:用户输入选择的商品序号,然后打印商品名称及商品价格 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 4:用户输入Q或者q,退出程序。
goods = [{"name": "电脑", "price": 1999},{"name": "鼠标", "price": 10},{"name": "游艇", "price": 20},{"name": "美女", "price": 998}, ] for i in range(len(goods)):print(i+1,goods[i]['name'],goods[i]['price']) while 1:content = input("输入Q退出,或请输入选择的商品序号:").strip()if content.upper()=='Q':breakelif content.isdigit():if int(content) in range(1,len(goods)+1):print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'])else:print('输入错误,请重新输入')else:print('输入错误,请重新输入')
View Code
方法二:运用三元运算符
goods = [{"name": "电脑", "price": 1999},{"name": "鼠标", "price": 10},{"name": "游艇", "price": 20},{"name": "美女", "price": 998}, ] for i in range(len(goods)):print(i+1,goods[i]['name'],goods[i]['price']) while 1:content = input("输入Q退出,或请输入选择的商品序号:").strip()if content.upper()=='Q':breakelif content.isdigit():print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'] if int(content) in range(1,len(goods)+1) else print('输入错误,请重新输入'))else:print('输入错误,请重新输入')
View Code
补充:字典没有就显示后面的这条数据
转载于:https://www.cnblogs.com/studybrother/p/10046557.html
巨蟒python全栈开发-第5天 字典集合相关推荐
- 巨蟒python全栈开发-第11阶段 ansible_project2
一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...
- 巨蟒python全栈开发-第11阶段 ansible_project1
今日大纲: 1.前端页面介绍 2.发布流程 3.需求分析 4.表结构设计 5.前端页面设计 昨日内容回顾: 1.roles - tasks- handlers- files- templates- v ...
- 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5pycharm夜神
1.MongoDB回顾 1.启动 mongod - 改变data/db位置: --dbpath D:\data\dbmongod --install 安装windows系统服务mongod --rem ...
- 巨蟒python全栈开发-第10天 函数进阶
一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...
- 巨蟒python全栈开发-第6天 is==
1.小数据池 2.id 3.decode和encode 小数据池 #小数据池:不要死磕就行#python为了简化,搞出来的一个东西 ID (1)# id()函数可以帮我们查看一个变量的内存地址# a= ...
- python123蟒蛇代码_巨蟒python全栈开发-第3天
1 今日作业 1.有变量name = "aleX leNb" 完成如下操作: #1)移除 name 变量对应的值两边的空格,并输出处理结果 '''''' '''# name = & ...
- 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from
一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...
- python点击事件onclick_巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式onblur和onfocus事件window.onload解释小米商城讲解...
1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...
- 巨蟒python全栈开发flask10 项目开始2
1.websocket异常处理 出现上图报错的原因是什么? 原因是:websocket断开了,所以报错 19行接收的msg是None值,所以报错. 打开一个文件,点击发送音乐,出现上面的内容: 客户端 ...
- 巨蟒python全栈开发flask11项目开始3
1.多玩具遥控&&websocket回锅 2.绑定玩具时添加好友的最终逻辑 3.消息&&好友列表 4.chat聊天&&对话窗口 1.多玩具遥控& ...
最新文章
- Bert需要理解的一些内容
- 奥鹏2014计算机应用基础,奥鹏大连理工大学2014年春《计算机应用基础》在线测试...
- MyBatis 源码解读-获得Mapper 对象
- NYOJ 1068 ST(段树 为段更新+间隔总和)
- ThreadLocal内存溢出代码演示和原因分析!
- spring boot报FileSizeLimitExceededException异常的解决方法
- tplink无线受限 服务器无响应,tplink怎么设置密码(tplink服务器无响应)
- Data Structures[翻译]
- 致运维——运维军团告诉你如何走过七年之痒
- Fluent批处理及.jou和.scm文件编写的相关操作
- 0x80004005错误代码解决方法,哪种方法快捷有效?
- 闲赋在家的猿们、接下来怎么走?
- 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习
- 来世你还能和你的父母重逢吗?
- 快要圣诞节啦,快去给小伙伴们分享漂亮的圣诞树吧
- a-card标签中的文字不能垂直居中
- 基于Qemu虚拟vexpress-a9开发板,实现完整系统启动(uboot+kernel+rootfs)
- MATLAB三点确定圆
- Qt 之 模仿 QQ登陆界面——旋转窗口篇
- Application生命周期
热门文章
- js中运算符的优先级
- 怎么使用水经注万能地图下载器制作百度个性化建筑地图
- Arcgis中按照cass标准分幅图框进行批量正射影像DOM分幅裁剪并命名
- Maven 安装教程
- 利用 FFT 模拟菲涅尔衍射积分
- 薛定谔 Maestro教程--用户界面 | 结构编辑 | 测量距离角度
- 红外遥控器解码串口输出模块结合51单片机+oled屏幕实现遥控器红外解锁( STC89C52RC)
- 谷歌5款插件推荐:谷歌工具类、翻译类扩展程序
- JavaEE-面试-Solr面试回答思路
- SiamFC代码分析(architecture、training、test)