用python写一个通讯录_python写一个通讯录
閑著沒事,用python寫一個模擬通訊錄,要求要實現常用的通訊錄的功能,基本流程如下
?
接下來就按照這個流程實現各個模塊的功能
1. 定義一個類,并初始化
def __init__(self):
with open("contact.txt", 'r', encoding='utf-8') as f:
self.data= json.loads(f.read()) #所有聯系人列表
2.? 接下來先定義一個方法,實現通訊錄的主界面的功能
1 defmain_menu(self):2 #主菜單(主頁面)
3 whileTrue:4 print('通訊錄'.center(20, '='))5 menu = {'1': '快速查找',6 '2': '添加聯系人',7 '3': '顯示所有聯系人'}8 for k, v inmenu.items():9 print(k + ' ' +v)10 command = input('請選擇你的操作>>')11 if command == '1':12 self.search()13 elif command == '2':14 self.add_contact()15 elif command == '3':16 self.show()17 elif command == 'q':18 print('退出...')19 break
調用該方法,就會顯示一個主界面,注:整個程序都有“返回”功能,操作命令是按"q"
?
用戶可以選擇“快速查找”(定義了一個search()方法來實現),“添加聯系人”(定義了一個add_address()方法實現),“顯示所有聯系人”(定義了一個show()方法來實現),然后根據用戶的輸入如,進入下一個子頁面
下面介紹這幾個方法的具體實現過程
search()方法(通訊錄查找)
1 defsearch(self):2 print('快速查找'.center(20, '='))3 #可以根據聯系人名字查找,也可以根據電話號碼查找
4 find_info = input('請輸入查找信息>>')5 count =06 for i inrange(len(self.data)):7 if count >len(self.data):8 print('未找到該聯系人')9 break
10 if find_info in self.data[i]['name']:11 self.person_info(self.data[i]) #若有該聯系人,則進入聯系人個人信息頁
12 elif find_info in self.data[i]['phone_number']:13 self.person_info(self.data[i]) #若有該號碼,則進入聯系人個人信息頁
14 else:15 pass
16 count += 1
該方法是根據用戶的輸入,查找到聯系人之后,返回聯系人信息。該方法提供兩種查找的方法,一種是根據備注名來查找,一種是根據電話號碼來查找,若找不到則提示用戶未找到,找到則跳轉到該聯系人的個人信息頁
?
上面這個方法里面嵌套了一個方法,person_info(),參數是查找到的聯系人的個人信息。這個方法的功能是展示某個聯系人的個人信息頁面,具體實現的過程如下
1 defperson_info(self, info):2 #個人信息頁
3 #find_info 是該聯系人的信息字典
4 print('已為你找到:{}'.format(info['name']))5 menu = {'1': '查看個人信息', '2': '修改信息', '3': '刪除聯系人', '4': '呼叫聯系人', '5': '呼叫記錄'}6 whileTrue:7 print('個人信息頁'.center(20, '='))8 for k, v inmenu.items():9 print(k + ' ' +v)10 command = input('請選擇操作>>')11 if command == '1':12 print('姓名:{}\n電話號碼:{}\n通話記錄:{}'.format(info['name'],13 info['phone_number'], info['call_records']))14 elif command == '2':15 self.modify_info(info)16 elif command == '3':17 self.del_contact(info)18 break #刪除聯系人之后,該聯系人的個人信息頁就沒了,所以就得跳回去
19 elif command == '4':20 self.call(info)21 elif command == '5':22 self.call_logs(info)23 elif command == 'q':24 print('返回...')25 break
如果正確進入該頁的話,將會看到下面這個界面
?
然后用戶可以根據提示,選擇你接下來的操作。根據代碼可以看到,從1到5,各個功能都分別定義了一個方法(函數)。下面來介紹一下這幾個方法的實現過程
修改信息
1 defmodify_info(self, info):2 #修改聯系人信息
3 #info是該聯系人信息字典
4 if info inself.data:5 self.data.remove(info) #將所有聯系人的列表中的該聯系人刪除,等修改好之后再后在重新加進去,然后更新通訊錄
6 menu = {'1': '修改備注', '2': '修改號碼', '3': '刪除通話記錄'}7 whileTrue:8 print('修改信息'.center(20, '='))9 for k, v inmenu.items():10 print(k + ' ' +v)11 command = input('請選擇操作>>')12 if command == 'q':13 print('返回...')14 break
15 if command == '1':16 info['name'] = input('請輸入備注>>')17 elif command == '2':18 info['phone_number'] = input('請輸入號碼>>')19 elif command == '3':20 info['call_records'] =[]21 else:22 continue
23 self.data.append(info) #將修改過的該聯系人信息加入所有聯系人信息列表,以待更新通訊錄
24 #print(self.data)
25 self.update_contact() #更新通訊錄
26 print('信息修改成功')
修改信息可以修改備注、號碼、刪除通話記錄(因為通話記錄可以是多條的,所以通話記錄是一個列表,刪除通話記錄就是將該列表變成空列表)
?
刪除聯系人
1 defdel_contact(self, info):2 #刪除聯系人
3 try:4 self.data.remove(info)5 exceptException as e:6 print(e)7 self.update_contact()8 print('成功刪除聯系人: {}'.format(info['name']))
刪除聯系人之后,該聯系人的個人信息頁也就沒意義,所以是刪除成功就直接回到主頁面
?
呼叫聯系人
1 defcall(self, info):2 #呼叫聯系人
3 print('呼叫{}'.format(info['name']).center(20, '='))4 print('通話中...')5 self.data.remove(info)6 start_time =time.time()7 now_time =time.ctime()8 input('按e掛斷電話>>')9 end_time =time.time()10 pass_time = end_time -start_time11 info['call_records'].append(now_time+"通話時長:"+str(pass_time)) #將本次通話加入通話記錄的列表中
12 self.data.append(info)13 self.update_contact()14 print('通話結束')
這兒方法很簡單,就是記錄開始時間start_time之后,提示用戶隨時可以結束通話(按e(end)掛斷),然后通話結束之后,又會得到一個結束時間end_time,這樣通話時長就可以得到了,通話時間就是撥號時的時間。
?
呼叫記錄
1 defcall_logs(self, info):2 #通話記錄
3 print('呼叫記錄'.center(20, '='))4 with open('contact.txt', 'r', encoding='utf-8') as f:5 data_list =json.loads(f.read())6 for data indata_list:7 if data['name'] == info['name']:8 print(data['call_records'])9 break
10 else:11 continue
這個沒什么好說的,就是讀取通訊錄信息,然后打印與該用戶的的通話記錄就可以了。
?
注意,上面的這些代碼,牽扯到通訊錄信息的增、刪、改的,在操作完之后都要將信息重新寫入一次,即模擬刷新通訊錄,這個刷新通訊錄的方法是update_contact(),代碼如下
1 defupdate_contact(self):2 #刷新通訊錄
3 with open('contact.txt', 'w', encoding='utf-8') as f:4 try:5 json.dump(self.data, f, ensure_ascii=False)6 exceptException as e:7 print('操作失敗:%s' % e)
注,self.data 是通訊錄里所有聯系人的信息的一個列表,刷新通訊錄實際上就是當self.data被修改之后,就重新將它寫進通訊錄,這樣就實現了更新的功能。dump()里面的參數ensure_ascii=False的作用是讓輸入的中文寫入時就是顯示中文,而不是unicode編碼。
主頁面中的添加聯系人
1 defadd_contact(self):2 #添加聯系人
3 #print(self.data)
4 print('添加聯系人'.center(20, '='))5 new_contact =dict()6 new_contact['name'] = input('請輸入聯系人備注>>')7 new_contact['phone_number'] = input('請輸入號碼>>')8 new_contact['call_records'] =[]9 self.data.append(new_contact)10 self.update_contact() #更新通訊錄
11 print('成功添加聯系人')
?
主頁面中的顯示全部聯系人(如果不想慢慢查找,可以用這個方法實現顯示所有聯系人)
1 defshow(self):2 #顯示所有聯系人
3 print('所有聯系人'.center(20, '='))4 contacts = {} #所有聯系人的名字
5 for i inrange(len(self.data)):6 contacts[str(i)] = self.data[i]['name']7 print('{} {}'.format(str(i), self.data[i]['name']))8 command = input('請選擇查看聯系人>>')9 name =contacts[command]10 for data inself.data:11 if data['name'] ==name:12 self.person_info(data)13 else:14 continue
?
代碼中讀取文件的方式是用json模塊
完整代碼:
1 #--*-- coding:utf-8 --*--
2
3 importjson4 importtime5
6
7 classContact(object):8
9 data = "hello"
10
11 def __init__(self):12 with open("contact.txt", 'r', encoding='utf-8') as f:13 self.data = json.loads(f.read()) #所有聯系人列表
14 #print(self.data, type(self.data))
15
16 defmain_menu(self):17 #主菜單(主頁面)
18 whileTrue:19 print('通訊錄'.center(20, '='))20 menu = {'1': '快速查找',21 '2': '添加聯系人',22 '3': '顯示所有聯系人'}23 for k, v inmenu.items():24 print(k + ' ' +v)25 command = input('請選擇你的操作>>')26 if command == '1':27 self.search()28 elif command == '2':29 self.add_contact()30 elif command == '3':31 self.show()32 elif command == 'q':33 print('退出...')34 break
35
36 defsearch(self):37 print('快速查找'.center(20, '='))38 #可以根據聯系人名字查找,也可以根據電話號碼查找
39 find_info = input('請輸入查找信息>>')40 count =041 for i inrange(len(self.data)):42 if count >len(self.data):43 print('未找到該聯系人')44 break
45 if find_info in self.data[i]['name']:46 self.person_info(self.data[i]) #若有該聯系人,則進入聯系人個人信息頁
47 elif find_info in self.data[i]['phone_number']:48 self.person_info(self.data[i]) #若有該號碼,則進入聯系人個人信息頁
49 else:50 pass
51 count += 1
52
53 defperson_info(self, info):54 #個人信息頁
55 #find_info 是該聯系人的信息字典
56 print('已為你找到:{}'.format(info['name']))57 menu = {'1': '查看個人信息', '2': '修改信息', '3': '刪除聯系人', '4': '呼叫聯系人', '5': '呼叫記錄'}58 whileTrue:59 print('個人信息頁'.center(20, '='))60 for k, v inmenu.items():61 print(k + ' ' +v)62 command = input('請選擇操作>>')63 if command == '1':64 print('姓名:{}\n電話號碼:{}\n通話記錄:{}'.format(info['name'],65 info['phone_number'], info['call_records']))66 elif command == '2':67 self.modify_info(info)68 elif command == '3':69 self.del_contact(info)70 break #刪除聯系人之后,該聯系人的個人信息頁就沒了,所以就得跳回去
71 elif command == '4':72 self.call(info)73 elif command == '5':74 self.call_logs(info)75 elif command == 'q':76 print('返回...')77 break
78
79 defcall_logs(self, info):80 #通話記錄
81 print('呼叫記錄'.center(20, '='))82 with open('contact.txt', 'r', encoding='utf-8') as f:83 data_list =json.loads(f.read())84 for data indata_list:85 if data['name'] == info['name']:86 print(data['call_records'])87 break
88 else:89 continue
90
91 defcall(self, info):92 #呼叫聯系人
93 print('呼叫{}'.format(info['name']).center(20, '='))94 print('通話中...')95 self.data.remove(info)96 start_time =time.time()97 now_time =time.ctime()98 input('按e掛斷電話>>')99 end_time =time.time()100 pass_time = end_time -start_time101 info['call_records'].append(now_time+"通話時長:"+str(pass_time)) #將本次通話加入通話記錄的列表中
102 self.data.append(info)103 self.update_contact()104 print('通話結束')105
106 defdel_contact(self, info):107 #刪除聯系人
108 try:109 self.data.remove(info)110 exceptException as e:111 print(e)112 self.update_contact()113 print('成功刪除聯系人: {}'.format(info['name']))114
115 defmodify_info(self, info):116 #修改聯系人信息
117 #info是該聯系人信息字典
118 if info inself.data:119 self.data.remove(info) #將所有聯系人的列表中的該聯系人刪除,等修改好之后再后在重新加進去,然后更新通訊錄
120 menu = {'1': '修改備注', '2': '修改號碼', '3': '刪除通話記錄'}121 whileTrue:122 print('修改信息'.center(20, '='))123 for k, v inmenu.items():124 print(k + ' ' +v)125 command = input('請選擇操作>>')126 if command == 'q':127 print('返回...')128 break
129 if command == '1':130 info['name'] = input('請輸入備注>>')131 elif command == '2':132 info['phone_number'] = input('請輸入號碼>>')133 elif command == '3':134 info['call_records'] =[]135 else:136 continue
137 self.data.append(info) #將修改過的該聯系人信息加入所有聯系人信息列表,以待更新通訊錄
138 #print(self.data)
139 self.update_contact() #更新通訊錄
140 print('信息修改成功')141
142 defupdate_contact(self):143 #刷新通訊錄
144 with open('contact.txt', 'w', encoding='utf-8') as f:145 try:146 json.dump(self.data, f, ensure_ascii=False)147 exceptException as e:148 print('操作失敗:%s' %e)149
150 defadd_contact(self):151 #添加聯系人
152 #print(self.data)
153 print('添加聯系人'.center(20, '='))154 new_contact =dict()155 new_contact['name'] = input('請輸入聯系人備注>>')156 new_contact['phone_number'] = input('請輸入號碼>>')157 new_contact['call_records'] =[]158 self.data.append(new_contact)159 self.update_contact() #更新通訊錄
160 print('成功添加聯系人')161
162 defshow(self):163 #顯示所有聯系人
164 print('所有聯系人'.center(20, '='))165 contacts = {} #所有聯系人的名字
166 for i inrange(len(self.data)):167 contacts[str(i)] = self.data[i]['name']168 print('{} {}'.format(str(i), self.data[i]['name']))169 command = input('請選擇查看聯系人>>')170 name =contacts[command]171 for data inself.data:172 if data['name'] ==name:173 self.person_info(data)174 else:175 continue
176
177
178 if __name__ == '__main__':179 a1 =Contact()180 a1.main_menu()
總結
以上是生活随笔為你收集整理的用python写一个通讯录_python写一个通讯录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: domoticz智能家居系统 MQTT
- 下一篇: 多好积攒的客户没了,怎样找回删除的手机通