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\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 in card_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個半月了。很多知識雖然都知道,但還是要通過一些程序來練練手,加強自己動手能力,其次也能達到一個溫故而知新的效果。