why?我要写这个程序。这个程序是在复习字典的使用并且配合前面复习过的列表来写的一个程序。实现一个名片的管理!
什么时候用列表什么时候用字典呢?面对这个问题我的想法是,当你存取的数据类型都是一样的时候,使用列表,当你存取的数据类型不一样时就用字典。这里说明一下数据类型不一样不是指整形或者字符型
举个例子:如果你需要存很多人的姓名,仅仅这一个属性,就用列表来进行处理,当你要存取不仅仅是人名,包括年龄,性别,国籍等等这些信息时,这时候用字典是最合适的。
在编写这个程序时,首先考虑2个问题:
1、列表里面嵌套字典,怎么实现删除
这是一个names列表。怎么实现输入姓名后,可以删除这条字典,当输入pjj,删除整个字典,再次打印names时只有后面的一条信息。
names = [{'name':'pjj','age':18},{'name':'zy','age':20}]
while True:
# 删除
del_name = input("请输入要删除的名字:")
find_flag = False
for line in names:
if line['name'] ==del_name:
find_flag = True
names.remove(line)
if find_flag:
print("已删除!")
else:
print("输入的用户名不存在")
print(names)
2、列表里面嵌套字典,怎么实现修改,当输入pjj,判断pjj是否存在,如果存在则进行修改!
1 names = [{'name':'pjj','age':18},{'name':'zy','age':20}]2 whileTrue:3 #修改
4 old_name = input('请输入要修改的姓名:')5 flag =06 for line innames:7 if line['name'] ==old_name:8 new_name = input('请输入修改的姓名:')9 new_age = input('请输入修改的年龄:')10 line['name'] =new_name11 line['age'] =int(new_age)12 flag =True13 break
14 ifflag:15 print("已修改!")16 else:17 print('输入的用户不存在!')18 print(names)
解决了上述2个问题后!就开始写这个名片管理系统了!
需求:
当用户输入对应的序号,实现相应的功能(总共6个)
1:添加一个新的名片
2:删除一个名片
3:修改一个名片
4:查询一个名片
5:显示所有的名片
6:退出系统
Code:
1 #Author:P J J
2
3 #1打印功能提示
4 print('=' * 50)5 print('名字关系系统 V2.0')6 print('1:添加一个新的名片')7 print('2:删除一个名片')8 print('3:修改一个名片')9 print('4:查询一个名片')10 print('5:显示所有的名片')11 print('6:退出系统')12 print('=' * 50)13
14 #用来存储名片
15 card_infors =[]16
17 whileTrue:18 #2获取用户选择
19 num = input('请输入操作序号:')20 ifnum.isdigit():21 num =int(num)22 if num == 1:23 new_name = input('请输入名字:')24 new_qq = input('请输入QQ:')25 new_weixin = input('请输入微信:')26 new_addr = input('请输入新的住址:')27
28 #定义一个新的字典,用来存储一个新的名片
29 new_infor ={}30 new_infor['name'] =new_name31 new_infor['qq'] =new_qq32 new_infor['weixin'] =new_weixin33 new_infor['addr'] =new_addr34
35 #将一个字典,添加到列表中
36 card_infors.append(new_infor)37 #print(card_infors) # for test
38 elif num == 2:39 del_name = input("请输入要删除的名字:")40 find_flag =False41 for line incard_infors:42 if line['name'] ==del_name:43 find_flag =True44 card_infors.remove(line)45 break
46 iffind_flag:47 print("已删除!")48 else:49 print("输入的用户名不存在")50 #print(card_infors) for test
51 elif num == 3:52 old_name = input('请输入要修改的姓名:')53 flag =054 for line incard_infors:55 if line['name'] ==old_name:56 new_name = input('姓名:')57 new_qq = input('年龄:')58 new_weixin = input('微信:')59 new_addr = input('住址:')60
61 line['name'] =new_name62 line['qq'] =new_qq63 line['weixin'] =new_weixin64 line['addr'] =new_addr65 flag =True66 break
67 ifflag:68 print("已修改!")69 else:70 print('输入的用户不存在!')71 elif num == 4:72 find_nmae = input("请输入要查找的姓名:")73
74 find_flag = 0 #默认表示没有找到
75
76 for temp incard_infors:77 if find_nmae == temp['name']:78 print('%s\t%s\t%s\t%s' % (temp['name'], temp['qq'], temp['weixin'], temp['addr']))79 find_flag = 1 #表示找到了
80 break
81
82 #判断是否找到
83 if find_flag ==0:84 print('没有找到')85
86 elif num == 5:87 print("姓名\tQQ\t微信\t住址\t")88 for temp incard_infors:89 print('%s\t%s\t%s\t%s\t' % (temp['name'], temp['qq'], temp['weixin'], temp['addr']))90 elif num == 6:91 break
92 else:93 print('输入有误!请重新输入')94 continue
95 print('')96 else:97 print("输入错误,请重新输入!")
感想:
这个程序是结合了列表、字典的增删改查来实现的!当学会了列表的增删改查后,再学会了字典的增删改查后,当两者结合时,怎么实现增删改查呢??在编写这个程序的过程中,出现了让我纠结的两个问题,就是列表里面嵌套字典怎么实现修改和删除呢!我自己新建了一个test.py,通过一个简单的列表嵌套字典实现删除和修改后才完成了这个系统!有兴趣的亲可以根据需求去练下手。如果刚刚才学完列表增删改查的同学可以看下前面一篇 Python-列表的运用-名字管理系统 加强对列表的熟悉!自己学Python也有1个半月了。很多知识虽然都知道,但还是要通过一些程序来练练手,加强自己动手能力,其次也能达到一个温故而知新的效果。