日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用python写一个通讯录_python写一个通讯录

發布時間:2024/3/26 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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写一个通讯录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。