Python初學者筆記(4)-簡單的通訊錄


要求:

編寫一個簡單的通訊錄

1、通訊錄包含至少包含姓名、電話號碼、電子郵箱;2、通訊錄的信息能夠保存在本地磁盤;3、通訊錄查找特定人員的信息;4、通訊錄能夠修改特定人員的信息;5、通訊錄能夠刪除特定人員的信息;6、通訊錄能完全顯示所有人的信息

 

方法:Python 2.7.9 / Windows

  1 # -*- coding: gbk -*-
  2 
  3 import os,sys
  4 import cPickle as p
  5 
  6 #判斷通訊錄是否存在,不存在則創建通訊錄
  7 if os.path.exists('contacts.dat')==False:
  8     f = file('contacts.dat','wb')
  9     temp = {'total':0}
 10     p.dump(temp,f)
 11     f.close()
 12     print "\n本地磁盤尚無通訊錄,新通訊錄創建成功!\n"
 13 else:
 14     pass
 15 
 16 #添加聯系人
 17 def add():
 18     f = file('contacts.dat','rb')
 19     a = p.load(f)
 20     f.close()
 21     name = raw_input('請輸入所要添加聯系人的姓名:')
 22     if a.has_key(name):
 23         print "\n聯系人已存在,添加失敗!請改名~"
 24     else:
 25         tel = raw_input('請輸入電話號碼:')
 26         email = raw_input('請輸入所要添加聯系人的電子郵件(example@example.com):')
 27         list = [tel,email]
 28         information = {name:list}
 29         a['total'] += 1
 30         a.update(information)
 31         f = file('contacts.dat','wb')
 32         p.dump(a,f)
 33         f.close()
 34         print '添加成功!'
 35 
 36 #顯示所以聯系人
 37 def showall():
 38     f = file('contacts.dat','rb')
 39     a = p.load(f)
 40     print "一共有{}個聯系人.\n".format(a['total'])
 41     print "{:<8}\t{:<15}\t{:<30}".format('姓名','電話號碼','電子郵箱')
 42     for key in a.keys():
 43         if key != 'total':
 44             print "{:<8}\t{:<15}\t{:<30}".format(key,a[key][0],a[key][1])
 45     f.close()
 46 
 47 #退出通訊錄
 48 def exit():
 49     sys.exit()
 50 
 51 #查找
 52 def search(name):
 53     f = file('contacts.dat','rb')
 54     a = p.load(f)
 55     if a.has_key(name):
 56         print "{}的號碼是:{}".format(name,a[name][0])
 57         print "{}的電子郵箱是:s{}".format(name,a[name][1])
 58     else:
 59         print "聯系人不存在!"
 60     f.close()
 61 
 62 #刪除
 63 def delete(name):
 64     f = file('contacts.dat','rb')
 65     a = p.load(f)
 66     f.close()
 67     if a.has_key(name):
 68         a.pop(name)
 69         a['total'] -= 1
 70         f = file('contacts.dat','wb')
 71         p.dump(a,f)
 72         f.close()
 73         print "刪除成功!"
 74     else:
 75         print "聯系人不存在!無法刪除!"
 76 
 77 #修改
 78 def modify(name):
 79     f = file('contacts.dat','rb')
 80     a = p.load(f)
 81     f.close()
 82     if a.has_key(name):
 83         tel = raw_input("請輸入修改后的號碼:")
 84         a[name][0] = tel
 85         email = raw_input("請輸入修改后的郵箱:")
 86         a[name][1] = email
 87         f = file('contacts.dat','wb')
 88         p.dump(a,f)
 89         f.close()
 90         print "修改成功!"
 91     else:
 92         print "聯系人不存在!"
 93 
 94 #界面
 95 def menu():
 96     print
 97     print "****************************"
 98     print "     顯示菜單提示信息:*"
 99     print "     顯示所有聯系人:0"
100     print "     查找聯系人:1"
101     print "     添加聯系人:2"
102     print "     刪除聯系人:3"
103     print "     更改聯系人資料:4"
104     print "     退出通訊錄:5"
105     print "****************************"
106 
107 #主程序
108 while True:
109     menu()
110     x=raw_input("\n請輸入您的選擇菜單號:")
111     if x == '2':
112         add()
113         continue
114     if x == '0':
115         showall()
116         continue
117     if x == '5':
118         print "謝謝使用!"
119         exit()
120         continue
121     if x == '1':
122         name = raw_input("請輸入所要查找的聯系人姓名:")
123         search(name)
124         continue
125     if x == '3':
126         name = raw_input("請輸入所要刪除的聯系人姓名:")
127         delete(name)
128         continue
129     if x == '4':
130         name = raw_input("請輸入所要修改的聯系人姓名:")
131         modify(name)
132         continue
133     if x == '*':
134         menu()
135     else:
136         print "輸入的選項不存在,請重新輸入!"
137         continue

 

結果:

>>>

****************************
顯示菜單提示信息:*
顯示所有聯系人:0
查找聯系人:1
添加聯系人:2
刪除聯系人:3
更改聯系人資料:4
退出通訊錄:5
****************************

其余功能顯示正常。

 

說明:Windows平台下,開頭聲明# -*- coding: gbk -*-顯示中文正常

本來網上查詢中文亂碼問題,應該是使用# -*- coding: utf-8 -*-的開頭聲明,后發現這個聲明不管用,后改用gbk起作用。

更深入的內容有待后續研究,歡迎大家討論!

 

源自:DuShuSir.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM