python 全栈开发,Day5(字典,增删改查,其他操作方法)
一、字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。
存储大量的数据,是关系型数据,查询数据快。
列表是从头遍历到尾
字典使用二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
比如字典有1~100的数据,现在想要查找75。
先劈一半,找到中间值50。判断50和75的大小,发现小于,再劈一半。
找到中间值75,直接返回结果。
对于字符串查找
每一个字符串,都有一个hash值,是唯一的。
1 | print ( hash ( 'a' )) |
执行输出:
977260134378667761
1 | print ( hash ( 'afdsfeye' )) |
执行输出:
-8718419340409073569
字典可以存放各种数据类型
1 2 3 4 5 6 7 | dic = { 'name' : '老男孩' , 'age' : 17 , 'name_list' :[ '张三' , '李四' ], 1 : True ... } |
数据类型的分类:
可变数据类型(不可哈希):list,dict,set
不可变数据类型(可哈希):int,bool,str,tuple
容器类型:
容器类(承载各种数据类型):list,tuple,dic
字典的键:必须是不可变数据类型
字典的值:任意数据类型。
字典的键是唯一的。
数据类型分类,主要是可变和不可变
字典的顺序:
严格意义上来讲,是无序的
3.5之前,字典是无序的
3.6开始,字典创建的时候,按照一定的顺序插入的值,看起来是有序的
下面介绍字典的增删改查
增
第一种:
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic[ 'hobby' ] = 'girl' print (dic) |
执行输出:
{'age': 21, 'hobby': 'girl', 'name': 'xiao'}
第二种:
setdefault() 无则添加,有则不变
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic.setdefault( 'hobby' ) print (dic) |
执行输出:
{'hobby': None, 'name': 'xiao', 'age': 21}
dic.setdefault('hobby') 虽然只指定了key,没有指定value,默认会填充None
添加键值对
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic.setdefault( 'hobby' , 'girl' ) print (dic) |
执行输出:
{'age': 21, 'name': 'xiao', 'hobby': 'girl'}
添加一个已经存在的key
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic.setdefault( 'name' , '江疏影' ) print (dic) |
执行输出:
{'name': 'xiao', 'age': 21}
上述2个添加的方法,只能一个个添加。
删
pop() 删除指定的key
pop()是所有方法中,唯一有返回值的。
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.pop( 'age' )) print (dic) |
执行输出:
21
{'name': 'xiao'}
删除一个不存在的key
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.pop( 'hobby' )) print (dic) |
执行报错: KeyError: 'hobby'
删除一个不存在的key,并指定默认返回值None
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.pop( 'hobby' , None )) print (dic) |
执行输出:
None
{'age': 21, 'name': 'xiao'}
推荐使用上述方法,删除一个key。因为如果key不存在时,不会报错,返回None。程序员最怕报错了!
clear() 清空
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic.clear() print (dic) |
执行输出:
{}
del 删除字典
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } del dic |
del也可以删除指定的key,如果不存在,会报错
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } del dic[ 'hobby' ] |
推荐使用pop删除,并指定None
popitem() 随机删除,有返回值
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.popitem()) print (dic) |
执行输出:
('age', 21)
{'name': 'xiao'}
在3.6版本,会删除最后一个。
在抽签场景中,可能会用到此方法。
改
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } dic[ 'name' ] = 'zhangsan' print (dic) |
执行输出:
{'name': 'zhangsan', 'age': 21}
update() 针对2个字典的修改
1 2 3 4 5 6 | dic = { 'name' : 'jin' , 'age' : 21 , 'sex' : 'male' } dic2 = { 'name' : 'sun' , 'weight' : 76 } #将dic键值对,覆盖并添加到dic2 dic2.update(dic) print (dic) print (dic2) |
执行输出:
{'sex': 'male', 'name': 'jin', 'age': 21}
{'age': 21, 'weight': 76, 'name': 'jin', 'sex': 'male'}
可以发现dic没有改变,dic2改变了
update()修改原则
有相同的就覆盖,没有的就添加
查
通过key查找
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic[ 'name' ]) |
执行输出:
xiao
通过value查询
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic[ 'xiao' ]) |
执行报错: KeyError: 'xiao'
字典只能通过key查询,不能通过value查询,否则报错
get() 通过key查询
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.get( 'name' )) |
执行输出:
xiao
查询一个不存在的key
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.get( 'hobby' )) |
执行输出:
None
默认的None返回值是可以改变的
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.get( 'hobby' , '亲,木有这个字哦!' )) |
执行输出:
亲,木有这个字哦!
如果需要查询多个key,请使用for循环
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } for i in dic: print (i) |
执行输出:
age
name
其它操作方法:
keys() values() items()
keys()
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } print (dic.keys()) print ( type (dic.keys())) |
执行输出:
dict_keys(['name', 'age'])
<class 'dict_keys'>
keys()方法输出的数据是一个特殊类型,它相当于把所有的key放到了一个容器里面。
它类似于列表的容器,当它并不是列表。
它可以循环
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } for i in dic.keys(): print (i) |
执行输出:
age
name
values()
把所有的value放到一个容器里面
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } for i in dic.values(): print (i) |
执行输出:
xiao
21
items()
将键值对作为一个整体,放到元组中。集中放到一个容器中。
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } for i in dic.items(): print (i) |
执行输出:
('age', 21)
('name', 'xiao')
特殊类型转换为列表
1 2 | dic = { 'name' : 'xiao' , 'age' : 21 } print ( list (dic.keys())) |
执行输出:
['age', 'name']
分别循环key和value
1 2 3 | dic = { 'name' : 'xiao' , 'age' : 21 } for k,v in dic.items(): print (k,v) |
执行输出:
age 21
name xiao
现有如下字典,需要遍历key
1 | dic = { 'name' : 'xiao' , 'age' : 21 } |
第一种写法:
1 2 | for i in dic.keys(): print (i) |
第二种写法:
1 2 | for i in dic: print (i) |
以上2段代码,功能是一样的。推荐使用第二种。
概念: 分别赋值
比如
1 2 | a,b = 2 , 3 print (a,b) |
执行输出:
2 3
面试题:
a = 4,b = 5,请用一行代码,将a和b的值互换。
答案
1 | a,b = b,a |
字典的嵌套
出一个题目
1 2 3 4 | dic = { 'name_list' :[ '张三' , 'lisi' , '隔壁王叔叔' ], 'dic2' :{ 'name' : '太白' , 'age' : 12 } } |
1. 给列表追加一个元素:'旺旺'
2. 给列表lisi全部大写
3. 给dic2 对应的字典添加一个键值对:hobby:girl
答案:
1 2 3 4 5 6 7 8 9 | #1. dic[ 'name_list' ].append( '旺旺' ) print (dic) #2. dic[ 'name_list' ][ 1 ] = dic[ 'name_list' ][ 1 ].upper() print (dic) #3. dic[ 'dic2' ][ 'hobby' ] = 'girl' print (dic) |
执行输出:
{'name_list': ['张三', 'lisi', '隔壁王叔叔', '旺旺'], 'dic2': {'name': '太白', 'age': 12}}
{'name_list': ['张三', 'LISI', '隔壁王叔叔', '旺旺'], 'dic2': {'name': '太白', 'age': 12}}
{'name_list': ['张三', 'LISI', '隔壁王叔叔', '旺旺'], 'dic2': {'hobby': 'girl', 'name': '太白', 'age': 12}}
今日作业:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 1 ,有如下变量(tu是个元祖),请实现要求的功能 tu = ( "alex" , [ 11 , 22 , { "k1" : 'v1' , "k2" : [ "age" , "name" ], "k3" : ( 11 , 22 , 33 )}, 44 ]) a. 讲述元祖的特性 b. 请问tu变量中的第一个元素 "alex" 是否可被修改? c. 请问tu变量中的 "k2" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" d. 请问tu变量中的 "k3" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" 2 , 字典dic,dic = { 'k1' : "v1" , "k2" : "v2" , "k3" : [ 11 , 22 , 33 ]} a. 请循环输出所有的key b. 请循环输出所有的value c. 请循环输出所有的key和value d. 请在字典中添加一个键值对, "k4" : "v4" ,输出添加后的字典 e. 请在修改字典中 "k1" 对应的值为 "alex" ,输出修改后的字典 f. 请在k3对应的值中追加一个元素 44 ,输出修改后的字典 g. 请在k3对应的值的第 1 个位置插入个元素 18 ,输出修改后的字典 3 ,av_catalog = { "欧美" :{ "www.youporn.com" : [ "很多免费的,世界最大的" , "质量一般" ], "www.pornhub.com" : [ "很多免费的,也很大" , "质量比yourporn高点" ], "letmedothistoyou.com" : [ "多是自拍,高质量图片很多" , "资源不多,更新慢" ], "x-art.com" :[ "质量很高,真的很高" , "全部收费,屌丝请绕过" ] }, "日韩" :{ "tokyo-hot" :[ "质量怎样不清楚,个人已经不喜欢日韩范了" , "verygood" ] }, "大陆" :{ "1024" :[ "全部免费,真好,好人一生平安" , "服务器在国外,慢" ] } } # 1,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。 # 2,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 # 3,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 # 4,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。 # 5,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了'] # 6,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。 # 7,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' 4 、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 { 'k' : 1 , 'k1' : 2. ...} 5 、元素分类 有如下值li = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 即: { 'k1' : 大于 66 的所有值列表, 'k2' : 小于 66 的所有值列表} 6 、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] 要求: 1 :页面显示 序号 + 商品名称,如: 1 手机 2 电脑 … 2 : 用户输入选择的商品序号,然后打印商品名称 3 :如果用户输入的商品序号有误,则提示输入有误,并重新输入。 4 :用户输入Q或者q,退出程序。 明日默写内容。 1 )字典的增删改查。 2 )过滤敏感字符代码的默写。 li = [ "苍老师" , "东京热" , "武藤兰" , "波多野结衣" ] l1 = [] comment = input ( '请输入评论>>>' ) for i in li: if i in comment: comment = comment.replace(i, '*' * len (i)) l1.append(comment) print (l1) |
答案:
第1题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 1 ,有如下变量(tu是个元祖),请实现要求的功能 tu = ( "alex" , [ 11 , 22 , { "k1" : 'v1' ,元祖的特性 "k2" : [ "age" , "name" ], "k3" : ( 11 , 22 , 33 )}, 44 ]) a. 讲述元祖的特性 答案: 1. 创建之后不能加减修改元素 2. 元素也可以是数字、字符、变量或者混杂 3. 元组也可以嵌套 b. 请问tu变量中的第一个元素 "alex" 是否可被修改? 答案: 不可以 c. 请问tu变量中的 "k2" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" 答案: "k2" 对应的值是列表,可以修改。 修改代码如下: tu[ 1 ][ 2 ][ 'k2' ].append( 'Seven' ) d. 请问tu变量中的 "k3" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" 答案: "k3" 对应的值是元组类型,不可以修改 |
第2题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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) b. 请循环输出所有的value dic = { 'k1' : "v1" , "k2" : "v2" , "k3" : [ 11 , 22 , 33 ]} for i in dic.values(): print (i) c. 请循环输出所有的key和value dic = { 'k1' : "v1" , "k2" : "v2" , "k3" : [ 11 , 22 , 33 ]} 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) e. 请在修改字典中 "k1" 对应的值为 "alex" ,输出修改后的字典 dic = { 'k1' : "v1" , "k2" : "v2" , "k3" : [ 11 , 22 , 33 ]} dic[ 'k1' ] = 'alex' 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 ) print (dic) |
第3题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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 , '量很大' ) # 2,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 av_catalog[ '欧美' ][ 'x-art.com' ].pop( 1 ) # 3,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。 av_catalog[ '欧美' ][ 'x-art.com' ].pop( 1 ) # 4,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。 av_catalog[ '日韩' ][ 'tokyo-hot' ][ 1 ].upper() # 5,给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了'] av_catalog[ '大陆' ][ '1048' ] = [ '一天就封了' ] # 6,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。 av_catalog[ '欧美' ].pop( 'letmedothistoyou.com' , None ) # 7,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' av_catalog[ '大陆' ][ '1024' ][ 0 ] = av_catalog[ '大陆' ][ '1024' ][ 0 ] + '可以爬下来' |
第4题
4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
先使用split()指定分割符| 切割成列表
1 2 3 4 | li = "k:1|k1:2|k2:3|k3:4" li_s = li.split( '|' ) for i in li_s: print (i) |
执行输出:
k:1
k1:2
k2:3
k3:4
在for循环里面是,指定分割符:,再次切割
1 2 3 4 5 | li = "k:1|k1:2|k2:3|k3:4" li_s = li.split( '|' ) for i in li_s: q = i.split( ':' ) print (q) |
执行输出:
['k', '1']
['k1', '2']
['k2', '3']
['k3', '4']
那么列表中索引为0的就是key,索引为1就是value
使用字典方法添加键值对,完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | li = "k:1|k1:2|k2:3|k3:4" #使用|分割成列表 li_s = li.split( '|' ) #空字典 dic = {} for i in li_s: #使用:分割成列表 qie = i.split( ':' ) # #字典key key = qie[ 0 ] #字典value value = qie[ 1 ] #添加键值对 dic[key] = value #打印字典 print (dic) |
执行输出:
{'k1': '2', 'k2': '3', 'k': '1', 'k3': '4'}
代码优化
1 2 3 4 5 6 7 8 9 10 11 12 13 | li = "k:1|k1:2|k2:3|k3:4" #使用|分割成列表 li_s = li.split( '|' ) #空字典 dic = {} for i in li_s: #使用:分割成列表 qie = i.split( ':' ) #添加键值对 dic[qie[ 0 ]] = qie[ 1 ] #打印字典 print (dic) |
执行输出:
{'k3': '4', 'k2': '3', 'k': '1', 'k1': '2'}
将数字转换为整形
1 2 3 4 5 6 7 8 9 10 11 12 13 | li = "k:1|k1:2|k2:3|k3:4" #使用|分割成列表 li_s = li.split( '|' ) #空字典 dic = {} for i in li_s: #使用:分割成列表 qie = i.split( ':' ) #添加键值对 dic[qie[ 0 ]] = int (qie[ 1 ]) #打印字典 print (dic) |
执行输出:
{'k2': 3, 'k': 1, 'k1': 2, 'k3': 4}
第5题:
5、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
先打印列表的每一个元素
1 2 3 | li = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ] for i in li: print (i) |
执行输出:
11
22
33
...
90
定义字典,将大于66的,放入k1的列表中
1 2 3 4 5 6 7 | li = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ] #定义字典,key和value是空列表 dic1 = { 'k1' : [], 'k2' : []} for i in li: if i > 66 : dic1[ 'k1' ].append(i) print (dic1) |
执行输出:
{'k2': [], 'k1': [77, 88, 99, 90]}
将小于66的放入k2中,完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | li = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ] #定义字典,key和value是空列表 dic1 = { 'k1' : [], 'k2' : []} for i in li: #判断i是否大于66 if i > 66 : #追加到k1中 dic1[ 'k1' ].append(i) else : # 追加到k2中 dic1[ 'k2' ].append(i) print (dic1) |
执行输出:
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}
由于66跑到k2里面了,在改一下判断条件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | li = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ] # 定义字典,key和value是空列表 dic1 = { 'k1' : [], 'k2' : []} for i in li: # 判断i是否大于66 if i > 66 : # 追加到k1中 dic1[ 'k1' ].append(i) elif i < = 66 : # 追加到k2中 dic1[ 'k2' ].append(i) print (dic1) |
执行输出:
{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]}
第6题
1 2 3 4 5 6 7 8 9 | 6 、输出商品列表,用户输入序号,显示用户选中的商品 商品 li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] 要求: 1 :页面显示 序号 + 商品名称,如: 1 手机 2 电脑 … 2 : 用户输入选择的商品序号,然后打印商品名称 3 :如果用户输入的商品序号有误,则提示输入有误,并重新输入。 4 :用户输入Q或者q,退出程序。 |
先输入商品列表,并打印序号(使用index方法)
6.1
1 2 3 4 5 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] for i in li: #索引值 index = li.index(i) print (index,i) |
执行输出:
0 手机
1 电脑
2 鼠标垫
3 游艇
有了序号,就可以打印商品
判断用户的输入的内容是否为数字,定义一个非法字符串aa
6.2
1 2 3 4 5 6 7 8 9 10 11 12 13 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #用户输入内容 entry = 'aa' for i in li: #索引值 index = li.index(i) #判断用户输入的,是否是数字 if entry.isdigit(): #输入的序号转换为数字 entry_int = int (entry) else : print ( '您输入的含有非数字元素' ) break |
执行输出:
您输入的含有非数字元素
判断用户输入的数字是否大于列表的长度,定义一个数字11
6.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #用户输入内容 entry = '11' for i in li: #索引值 index = li.index(i) #判断用户输入的,是否是数字 if entry.isdigit(): #输入的序号转换为数字 entry_int = int (entry) #判断序号是否大于列表长度 if entry_int < len (li): #打印商品列表 print (li[entry_int]) break else : print ( '你输入的序号商品不存在,请重新输入!' ) break else : print ( '您输入的含有非数字元素' ) break |
执行输出:
你输入的序号商品不存在,请重新输入!
重新修改数字为1,再次执行,就可以输出商品了。
上面的代码是一次性输入,如果需要循环执行,怎么办?用while循环
先来一个简单的循环输入input,根据第4点要求,遇到Q或者q,退出程序
6.4
1 2 3 4 5 6 7 | flag = True while flag: entry = input ( '请输入序号:' ).strip() #将内容转换为大写, 判断是否是Q if entry.upper() = = 'Q' : flag = False print ( '退出程序' ) |
执行程序:
执行执行之前,打印商品列表
6.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True #遍历商品列表 for i in li: # 索引值 index = li.index(i) #打印序号和商品名称 print (index, i) while flag: entry = input ( '请输入序号:' ).strip() #将内容转换为大写, 判断是否是Q if entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : pass |
执行输出:
将6.3里面的for循环代码复制,替换到6.5里面pass里面,最后代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True #遍历商品列表 for i in li: # 索引值 index = li.index(i) #打印序号和商品名称 print (index, i) while flag: entry = input ( '请输入序号:' ).strip() #将内容转换为大写, 判断是否是Q if entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : for i in li: # 索引值 index = li.index(i) # 判断用户输入的,是否是数字 if entry.isdigit(): # 输入的序号转换为数字 entry_int = int (entry) # 判断序号是否大于列表长度 if entry_int < len (li): # 打印商品列表 print (li[entry_int]) break else : print ( '你输入的序号商品不存在,请重新输入!' ) break else : print ( '您输入的含有非数字元素' ) break |
执行输出:
输出部分修饰一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True print ( ''' |欢迎访问天猫商店| |序号| |商品名| ''' ) #遍历商品列表 for i in li: # 索引值 index = li.index(i) #打印序号和商品名称 print ( ' ' + str (index), ' ' + i) while flag: entry = input ( '请输入序号:' ).strip() #将内容转换为大写, 判断是否是Q if entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : for i in li: # 索引值 index = li.index(i) # 判断用户输入的,是否是数字 if entry.isdigit(): # 输入的序号转换为数字 entry_int = int (entry) # 判断序号是否大于列表长度 if entry_int < len (li): # 打印商品列表 print (li[entry_int]) break else : print ( '你输入的序号商品不存在,请重新输入!' ) break else : print ( '您输入的含有非数字元素' ) break |
执行输出:
代码优化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True print ( ''' |欢迎访问天猫商店| |序号| |商品名| ''' ) #遍历商品列表 for i in li: # 索引值 index = li.index(i) #打印序号和商品名称 print ( ' ' + str (index), ' ' + i) while flag: entry = input ( '请输入序号:' ).strip() # 判断用户输入的,是否是数字 if entry.isdigit(): # 输入的序号转换为数字 entry_int = int (entry) # 判断序号是否大于列表长度 if entry_int < len (li): # 打印商品列表 print (li[entry_int]) else : print ( '你输入的序号商品不存在,请重新输入!' ) elif entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : print ( '您输入的含有非数字元素' ) |
执行效果同上:
再次优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True print ( ''' |欢迎访问天猫商店| |序号| |商品名| ''' ) while flag: # 遍历商品列表 for i in li: # 索引值 index = li.index(i) # 打印序号和商品名称 print ( ' ' + str (index), ' ' + i) #用户输入编号 entry = input ( '请输入序号:' ).strip() # 判断用户输入的,是否是数字 if entry.isdigit(): # 输入的序号转换为数字 entry_int = int (entry) # 判断序号是否大于列表长度 if entry_int < len (li): # 打印商品列表 print ( '您选择的商品是:%s' % li[entry_int]) else : print ( '你输入的序号商品不存在,请重新输入!' ) #判断用户是否输入q elif entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : print ( '您输入的含有非数字元素' ) |
执行输出:
调整序号,加1。取值的时候,再减1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] #标志位 flag = True print ( ''' |欢迎访问天猫商店| |序号| |商品名| ''' ) while flag: # 遍历商品列表 for i in li: # 索引值 index = li.index(i) # 打印序号和商品名称,默认是从0开始,这里加1 print ( ' ' + str (index + 1 ), ' ' + i) #用户输入编号 entry = input ( '请输入序号:' ).strip() # 判断用户输入的,是否是数字 if entry.isdigit(): # 输入的序号转换为数字 entry_int = int (entry) # 判断序号是否大于0以及小于等于列表长度 if 0 < entry_int < = len (li): # 打印商品列表,取值的时候,要减1 print ( '您选择的商品是:%s' % li[entry_int - 1 ]) else : print ( '你输入的序号商品不存在,请重新输入!' ) #判断用户是否输入q elif entry.upper() = = 'Q' : flag = False print ( '退出程序' ) else : print ( '您输入的含有非数字元素' ) |
执行输出:
老师的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | li = [ "手机" , "电脑" , '鼠标垫' , '游艇' ] while True : for i in li: print ( '{}\t{}' . format (li.index(i) + 1 ,i)) num = input ( '请输入商品序号: q/Q退出:' ).strip() if num.isdigit(): num = int (num) if num > 0 and num < = len (li): print (li[num - 1 ]) else : print ( '您输入的选项,超出范围,请重新输入' ) elif num.upper() = = 'Q' : break else : print ( '输入的有非数字,请重新输入' ) |
执行输出:
明日默写内容。
1)字典的增删改查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | dict : 增: dic[ 'name' ] = 'jin' setdefault() 有则不变,无责添加。 删: pop 按照键删除键值对 pop( 'name1' , None ) clear 清空字典 del del dic del dic[ 'name' ] popitem() 随机删除,返回删除的元祖形式的键值对 改: dic[ 'name' ] = 'jin' update 查: dic[ 'name' ] dic.get( 'name' , 'sb没有此键' ) dic.keys() dic.values() dic.items() li = list (dic.keys()) for i in dic.values(): pass for k,v in dic.items(): pass |
2)过滤敏感字符代码的默写。
1 2 3 4 5 6 7 8 | li = [ "苍老师" , "东京热" , "武藤兰" , "波多野结衣" ] l1 = [] comment = input ( '请输入评论>>>' ) for i in li: if i in comment: comment = comment.replace(i, '*' * len (i)) l1.append(comment) print (l1) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix