亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python 實現簡單的電話本功能

系統 1530 0

myPhoneBook2.py

            
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
class 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 
##---------------------------------------------------- 

          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91成人午夜精品福利院在线观看 | 亚洲综合国产一区在线 | 免费观看视频成人国产 | 四虎国产精品一区二区 | 亚洲色四在线视频观看 | 曰本毛片 | 国产香蕉视频在线播放 | 久久免费视频一区 | 亚洲精品影视 | 久久一区二区三区不卡 | 久久狠狠色狠狠色综合 | 色欧洲| 91久久香蕉国产线看 | 日韩一区二区免费视频 | 四虎影院大全 | 一级毛片真人免费观看 | 狠狠躁日日躁人人爽 | 99这里精品| 免费av一区二区三区 | 亚洲综合色婷婷中文字幕 | 免费视频不卡一区二区三区 | 亚洲线精品久久一区二区三区 | 青青青国产深夜福利视频 | 欧美一级美片在线观看免费 | 香蕉成人国产精品免费看网站 | 亚洲精品二区 | 亚洲在线视频观看 | 五月天丁香婷婷综合久久 | 91在线免费视频 | 俄罗斯毛片视频 | 色拍999| 2023中文字幕在线观看 | 色天天综合久久久久综合片 | 一区二区三区美女视频 | 国产日韩欧美中文 | 在线免费观看国产精品 | 人人爽天天碰天天躁夜夜躁 | 99久久99久久精品 | 精品一区二区日本高清 | 中文字幕一区日韩在线视频 | 天天谢天天干 |