国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 實現簡單的電話本功能

2019-11-25 17:05:51
字體:
來源:轉載
供稿:網友

myPhoneBook2.py

#!/usr/bin/python# -*- coding: utf-8 -*-import reclass PhoneBook(object):  '''這是一個電話簿腳本。  該腳本能夠實現  AddContact:添加聯系人信息  ShowContact:查找姓名顯示聯系人  SaveContacts:存儲聯系人到 TXT 文檔(存儲格式――姓名:號碼/號碼)  LoadContacts:從 txt 文檔中載入聯系人  '''  def __init__(self):    self.contactsDict = {}  def AddContact(self):    while True:      name = raw_input('請輸入姓名>>>')      name = name.strip()      # 姓名必須包含有效字符      if name != '':        break      print '***姓名不能為空'           while True:      number = raw_input('請輸入號碼>>>')      number = re.sub(r'/D', '', number)      # 刪除號碼中的非數字字符      if number != '':        break      print '***號碼只能是數字'    cover = True #若聯系人已存在,是否覆蓋    if self.contactsDict.has_key(name):      print '***聯系人已存在'      self.ShowContact(name)      while True:        control = raw_input('''輸入 "c":覆蓋原來號碼輸入 "n":保留原來號碼并存儲新號碼輸入 "q" 退出/n>>>''')        if control.lower() == 'n':          cover = False          break        if control.lower() == 'c':          break        if control.lower() == 'q':          return None        print '***輸入錯誤'         if cover:      self.contactsDict[name] = number    else:      if number in self.contactsDict[name]:        print '***號碼已經存在'      else:        self.contactsDict[name] = self.contactsDict[name] + '/' + number  def ShowContact(self, name):    print '++++++++++++++++++++++++'    if self.contactsDict.has_key(name):      print '【聯系人信息】'      print '【姓名: %s】' % name      numberList = self.contactsDict[name].split('/')      for num in range(len(numberList)):        print '【號碼%d: %s】' % (num+1, numberList[num])         else:      print '【找不到聯系人%s】' % name    print '++++++++++++++++++++++++'     def DeleteNumber(self, name):    if self.contactsDict.has_key(name):      self.ShowContact(name)      number = self.contactsDict[name].split('/')      while True:        print '''請輸入要刪除號碼的序號或者輸入 "a" 刪除該聯系人或者輸入 "q" 退出(不刪除)(若聯系人號碼被全部刪除,該聯系人也將被刪除)'''        control = raw_input('>>>')        if control.lower() == 'q':          break        elif control.lower() == 'a':          del self.contactsDict[name]          break        elif control.isdigit() and int(control) <= len(number):          del number[int(control)-1]          self.contactsDict[name] = '/'.join(number)          break        else:          print '***輸入有誤'  def LoadContacts(self):    '''    try:      PhoneBook = open('PhoneBook.txt', 'a+')      contacts = PhoneBook.read()      if contacts == '':        print '***電話簿為空'      else:        ContactsList = contacts.split('/n')        for contact in ContactsList:          if not contact == '':            contact = contact.split(':')            name = contact[0]            number = contact[1]            self.contactsDict[name] = number    finally:      PhoneBook.close()    '''    self.contactsDict = {line.split(':')[0]: line.split(':')[1] for line in open('PhoneBook.txt','a+').readlines()}  def SaveContacts(self):    try:         if self.contactsDict:        PhoneBook = open('PhoneBook.txt', 'w')        for name, number in self.contactsDict.items():          line = name + ':' + number          PhoneBook.write(line)          PhoneBook.write('/n')             else:        print '***沒有聯系人信息'         finally:      PhoneBook.close()  if __name__ == '__main__':  myPhoneBook = PhoneBook()  myPhoneBook.LoadContacts()  try:    while True:      raw_input('按回車鍵繼續')      print '''--------------------------------  輸入 a:添加聯系人  輸入 s:顯示聯系人信息  輸入 d:刪除聯系人  輸入 q:退出--------------------------------'''      control = raw_input('>>>')      if control.lower() == 'a':        myPhoneBook.AddContact()      elif control.lower() == 's':        name = raw_input('請輸入要查找的聯系人姓名/n>>>')        myPhoneBook.ShowContact(name)      elif control.lower() == 'd':        name = raw_input('請輸入要刪除的聯系人姓名/n>>>')        myPhoneBook.DeleteNumber(name)      elif control.lower() == 'q':        break      else:        print '***輸入有誤'         finally:    myPhoneBook.SaveContacts()

花了一個下午和半個晚上寫了這個簡單通訊錄:
哈哈,第一次寫這么長的Python代碼,自認為結構還是挺合理的。
代碼如下:

#-*- coding:utf-8 -*- # file :addrList.py # date :2011-10-24 15:40:13 # 設計一個基本的通訊錄管理程序,使其具有添加,刪除,編輯,查找等功能。 # 要求使用C/C++,java,javascript,python中任意一種語言實現。字符界面即可。 # 不需要有GUI(圖形界面) import sys import os import string import re from datetime import datetime  QUIT_FLAG = False ADDRS_LIST = "addr_list.txt" _addrs_dict = {}  _addrs_count = 0 DEBUG=2 def info(message):   global DEBUG   if DEBUG > 0:     print message  def debug(message):   global DEBUG   if DEBUG > 1:     print message  def warn(message):   global DEBUG   if DEBUG > 0:     print message    def error(message):   print message  def help():   print "用法:輸入菜單中的命令即可執行相應操作!"   print "可用菜單命令如下:"   showMenu()  def showMenu():   print "+******************操作菜單***********************+"   print "|查看所有聯系人(all) | 查找聯系人(find)      |"   print "|添加聯系人(add)   | 刪除聯系人(remove)     |"   print "|編輯聯系人(edit)  | 保存并退出(save)      |"   print "|使用幫助(help)   | 退出但不保存(quit)     |"   print "+_________________________________________________+"  def showError(info):   print info   def doSwitch(op):   if op == "all":     doAll()   elif op == "find":     doFind()   elif op == "add":     doAdd()   elif op == "remove":     doRemove()   elif op == "edit":     doEdit()   elif op == "save":     doSave()   elif op == "help":     help()   elif op == "quit":     doQuit()   else:     showError("錯誤:您輸入的命令有誤,請重新輸入。需要幫助請輸入help!")  def verifyInput(items):   _flag = True   _rPhone = re.compile(r'1[0-9]{10}')   _rQQ  = re.compile(r'[1-9][0-9]{4,9}')   if len(items[0]) > 10:     _flag = False     print "姓名太長了!"   if not _rPhone.match(items[1]):     _flag = False     print "手機號碼格式不正確"   if not _rQQ.match(items[2]):     _flag = False     print "QQ號碼輸入有誤"   return _flag     def buildAddr(addr):   _addr={}   items=addr.split()   if len(items) < 3:     print "您輸入的信息太少了"     return None   if not verifyInput(items):     return None    _addr['name']=items[0]   _addr['phone'] = items[1]   _addr['QQ'] = items[2]   return _addr  def addAddr(addr):   global _addrs_count,_addrs_dict   _addrs_count+=1   _addr=buildAddr(addr)   if not _addr:     return None   _addrs_dict[_addrs_count]=_addr  def init():   if not os.path.isfile(ADDRS_LIST):     return None    faddr=open(ADDRS_LIST,"r")   for line in faddr:      if len(line) == 0:       continue     addAddr(line)   faddr.close()   def save():   global _addrs_dict   faddr=open(ADDRS_LIST,"w+")   for addr in _addrs_dict.values():     faddr.write("{0}/t{1}/t{2}/n".format(addr['name'],addr['phone'],addr['QQ']))   faddr.flush()   faddr.close()   def doAll():   global _addrs_dict   if len(_addrs_dict) < 1:     print "聯系人當中暫無記錄!"     return None   printHead()   for key,addr in _addrs_dict.items():     printAddr(key,addr)  def doFind():   _flag=False   flag1=flag2=flag3=False   cond=raw_input("請輸入查詢信息:>")   debug("DEBUG:{0}".format(cond))   if len(cond) == 0:     return None   if cond.isdigit():     flag1=findById(int(cond,10))     flag2=findByPhone(cond)     flag3=findByQQ(cond)   else:     flag1=findByName(cond)      _flag = flag1 or flag2 or flag3    if not _flag:     print "沒有查找到任何聯系人!"  def doAdd():   line = raw_input("請依次輸入聯系人的姓名,手機號碼,QQ號碼>")   if len(line) == 0:     return None   addAddr(line)    def existsId(_id):   global _addrs_dict   return _addrs_dict.has_key(_id) #  if _id > _addrs_count or _id < 1: #    return False  #  else: #    return True  def doRemove():   FLAG = True   while FLAG:     key=raw_input("請輸入要刪除的聯系人的編號(取消請輸入#)")     if key == '#':       FLAG = False       continue     if not existsId(int(key,10)):       print "不存在您所輸入編號的聯系人。請確認"       continue        print "編號為 {0} 的聯系人信息如下:".format(key)     printById(int(key,10))     yesOrNo=raw_input("您確定要刪除上述聯系人嗎?(y/n)")     if yesOrNo in "yY":       removeById(int(key,10))       print "刪除成功!"     yesOrNo=raw_input("您還需要繼續刪除聯系人嗎?(y/n)")     if not yesOrNo in "yY":       FLAG = False    def doEdit():   FLAG = True   while FLAG:     key=raw_input("請輸入要編輯的聯系人的編號(取消請輸入#)")     print "DEBUG:key:{0}".format(key)     if key == '#':       FLAG = False       continue     if not existsId(int(key,10)):       print "不存在您所輸入編號的聯系人。請確認"       continue        print "編號為 {0} 的聯系人信息如下:".format(key)     printById(int(key,10))     updateById(int(key,10))     FLAG = False   def doSave():   save()   doQuit()  def doQuit():   global QUIT_FLAG   QUIT_FLAG = True   print "正在退出……" #  exit(0)  def printHead():   print "+-----+----------+---------------+---------------+"   print "|編號 |  姓名  | 手機號碼   |   QQ號碼  |"   print "+-----+----------+---------------+---------------+"  def printAddr(key,addr): #  print "+-----+----------+---------------+---------------+"   print "|{0:^5}|{1:^10}|{2:^15}|{3:^15}|".format(key,addr['name'],addr['phone'],addr['QQ'])   print "+-----+----------+---------------+---------------+"    def printById(_id):   global _addrs_dict   printHead()   printAddr(_id,_addrs_dict[_id])  def removeById(_id):   global _addrs_dict   _addrs_dict.pop(_id)  def updateById(_id):   global _addrs_dict   _addr= _addrs_dict.get(_id)    print "請輸入該聯系人的新信息,相應留空則保留原有信息"   name=raw_input("請輸入新姓名:>")   if len(name) > 0:     _addr['name']=name    phone=raw_input("請輸入新手機號碼:>")   if len(phone) > 0:     _addr['phone']=phone    qq=raw_input("請輸入新的QQ號碼:>")   if len(qq) > 0 :     _addr['QQ']=qq    _addrs_dict[_id]=_addr   print "更新成功!"   print "聯系人新的信息如下:"   printById(_id)  def findById(_id):   if existsId(_id):     printById(_id)     return True   else:     return False  def findByField(cond,field='name'):   global _addrs_dict   _flag = False   for key,addr in _addrs_dict.items():     if addr[field].find(cond) != -1:       printAddr(key,addr)       _flag=True   return _flag  def findByName(name):   return findByField(name,'name')  def findByPhone(phone):   return findByField(phone,'phone')  def findByQQ(qq):   return findByField(qq,'QQ')    def main():   init()   showMenu()   while(not QUIT_FLAG):     operation=raw_input("請在此處輸入菜單命令>")     doSwitch(operation)   if __name__=='__main__':   main()   ## do something ##---------------------------------------------------- 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旬阳县| 长沙市| 达孜县| 扬州市| 桃源县| 利川市| 温宿县| 南城县| 遂溪县| 疏附县| 嘉祥县| 湾仔区| 张家港市| 基隆市| 绩溪县| 和林格尔县| 永昌县| 奎屯市| 翼城县| 德令哈市| 青铜峡市| 延安市| 手游| 南雄市| 茌平县| 鄱阳县| 固始县| 屏东县| 永嘉县| 陆丰市| 韶关市| 宁乡县| 南阳市| 嘉禾县| 老河口市| 延津县| 法库县| 林芝县| 山东省| 五指山市| 尚志市|