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 while True: 3 # 修改 4 old_name = input('请输入要修改的姓名:') 5 flag = 0 6 for line in names: 7 if line['name'] == old_name: 8 new_name = input('请输入修改的姓名:') 9 new_age = input('请输入修改的年龄:') 10 line['name'] = new_name 11 line['age'] = int(new_age) 12 flag = True 13 break 14 if flag: 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 while True: 18 # 2获取用户选择 19 num = input('请输入操作序号:') 20 if num.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_name 31 new_infor['qq'] = new_qq 32 new_infor['weixin'] = new_weixin 33 new_infor['addr'] = new_addr 34 35 # 将一个字典,添加到列表中 36 card_infors.append(new_infor) 37 #print(card_infors) # for test 38 elif num == 2: 39 del_name = input("请输入要删除的名字:") 40 find_flag = False 41 for line in card_infors: 42 if line['name'] == del_name: 43 find_flag = True 44 card_infors.remove(line) 45 break 46 if find_flag: 47 print("已删除!") 48 else: 49 print("输入的用户名不存在") 50 # print(card_infors) for test 51 elif num == 3: 52 old_name = input('请输入要修改的姓名:') 53 flag = 0 54 for line in card_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_name 62 line['qq'] = new_qq 63 line['weixin'] = new_weixin 64 line['addr'] = new_addr 65 flag = True 66 break 67 if flag: 68 print("已修改!") 69 else: 70 print('输入的用户不存在!') 71 elif num == 4: 72 find_nmae = input("请输入要查找的姓名:") 73 74 find_flag = 0 # 默认表示没有找到 75 76 for temp in card_infors: 77 if find_nmae == temp['name']: 78 print('%s %s %s %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("姓名 QQ 微信 住址 ") 88 for temp in card_infors: 89 print('%s %s %s %s ' % (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个半月了。很多知识虽然都知道,但还是要通过一些程序来练练手,加强自己动手能力,其次也能达到一个温故而知新的效果。