最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 實現(xiàn)簡單的電話本功能

 更新時間:2015年08月09日 17:00:38   投稿:hebedich  
這篇文章主要介紹了Python 實現(xiàn)簡單的電話本功能的相關(guān)資料,包括添加聯(lián)系人信息,查找姓名顯示聯(lián)系人,存儲聯(lián)系人到 TXT 文檔等內(nèi)容,十分的細致,有需要的小伙伴可以參考下

myPhoneBook2.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
class PhoneBook(object):
  '''這是一個電話簿腳本。

  該腳本能夠?qū)崿F(xiàn)
  AddContact:添加聯(lián)系人信息
  ShowContact:查找姓名顯示聯(lián)系人
  SaveContacts:存儲聯(lián)系人到 TXT 文檔(存儲格式——姓名:號碼/號碼)
  LoadContacts:從 txt 文檔中載入聯(lián)系人
  '''
  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)
      # 刪除號碼中的非數(shù)字字符
      if number != '':
        break
      print '***號碼只能是數(shù)字'

    cover = True #若聯(lián)系人已存在,是否覆蓋
    if self.contactsDict.has_key(name):
      print '***聯(lián)系人已存在'
      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 '***號碼已經(jīng)存在'
      else:
        self.contactsDict[name] = self.contactsDict[name] + '/' + number

  def ShowContact(self, name):
    print '++++++++++++++++++++++++'
    if self.contactsDict.has_key(name):
      print '【聯(lián)系人信息】'
      print '【姓名: %s】' % name
      numberList = self.contactsDict[name].split('/')
      for num in range(len(numberList)):
        print '【號碼%d: %s】' % (num+1, numberList[num])
     
    else:
      print '【找不到聯(lián)系人%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" 刪除該聯(lián)系人
或者輸入 "q" 退出(不刪除)
(若聯(lián)系人號碼被全部刪除,該聯(lián)系人也將被刪除)'''
        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 '***沒有聯(lián)系人信息'
     
    finally:
      PhoneBook.close()
 
 
if __name__ == '__main__':
  myPhoneBook = PhoneBook()
  myPhoneBook.LoadContacts()
  try:
    while True:
      raw_input('按回車鍵繼續(xù)')
      print '''
--------------------------------
  輸入 a:添加聯(lián)系人
  輸入 s:顯示聯(lián)系人信息
  輸入 d:刪除聯(lián)系人
  輸入 q:退出
--------------------------------'''
      control = raw_input('>>>')
      if control.lower() == 'a':
        myPhoneBook.AddContact()
      elif control.lower() == 's':
        name = raw_input('請輸入要查找的聯(lián)系人姓名\n>>>')
        myPhoneBook.ShowContact(name)
      elif control.lower() == 'd':
        name = raw_input('請輸入要刪除的聯(lián)系人姓名\n>>>')
        myPhoneBook.DeleteNumber(name)
      elif control.lower() == 'q':
        break
      else:
        print '***輸入有誤'
       
  finally:
    myPhoneBook.SaveContacts()

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

#-*- coding:utf-8 -*- 
# file :addrList.py 
# date :2011-10-24 15:40:13 
# 設(shè)計一個基本的通訊錄管理程序,使其具有添加,刪除,編輯,查找等功能。 
# 要求使用C/C++,java,javascript,python中任意一種語言實現(xiàn)。字符界面即可。 
# 不需要有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 "用法:輸入菜單中的命令即可執(zhí)行相應(yīng)操作!" 
  print "可用菜單命令如下:" 
  showMenu() 
 
def showMenu(): 
  print "+******************操作菜單***********************+" 
  print "|查看所有聯(lián)系人(all) | 查找聯(lián)系人(find)      |" 
  print "|添加聯(lián)系人(add)   | 刪除聯(lián)系人(remove)     |" 
  print "|編輯聯(lián)系人(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 "聯(lián)系人當(dāng)中暫無記錄!" 
    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 "沒有查找到任何聯(lián)系人!" 
 
def doAdd(): 
  line = raw_input("請依次輸入聯(lián)系人的姓名,手機號碼,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("請輸入要刪除的聯(lián)系人的編號(取消請輸入#)") 
    if key == '#': 
      FLAG = False 
      continue 
    if not existsId(int(key,10)): 
      print "不存在您所輸入編號的聯(lián)系人。請確認" 
      continue 
   
    print "編號為 {0} 的聯(lián)系人信息如下:".format(key) 
    printById(int(key,10)) 
    yesOrNo=raw_input("您確定要刪除上述聯(lián)系人嗎?(y/n)") 
    if yesOrNo in "yY": 
      removeById(int(key,10)) 
      print "刪除成功!" 
    yesOrNo=raw_input("您還需要繼續(xù)刪除聯(lián)系人嗎?(y/n)") 
    if not yesOrNo in "yY": 
      FLAG = False 
 
 
 
def doEdit(): 
  FLAG = True 
  while FLAG: 
    key=raw_input("請輸入要編輯的聯(lián)系人的編號(取消請輸入#)") 
    print "DEBUG:key:{0}".format(key) 
    if key == '#': 
      FLAG = False 
      continue 
    if not existsId(int(key,10)): 
      print "不存在您所輸入編號的聯(lián)系人。請確認" 
      continue 
   
    print "編號為 {0} 的聯(lián)系人信息如下:".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 "請輸入該聯(lián)系人的新信息,相應(yīng)留空則保留原有信息" 
  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 "聯(lián)系人新的信息如下:" 
  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 
##---------------------------------------------------- 

相關(guān)文章

  • 淺談pandas.cut與pandas.qcut的使用方法及區(qū)別

    淺談pandas.cut與pandas.qcut的使用方法及區(qū)別

    這篇文章主要介紹了淺談pandas.cut與pandas.qcut的使用方法及區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python中l(wèi)ogging日志模塊代碼調(diào)試過程詳解

    Python中l(wèi)ogging日志模塊代碼調(diào)試過程詳解

    這篇文章主要介紹了Python中l(wèi)ogging日志模塊代碼調(diào)試,今天來看看如何在代碼中定義日志,并探討日志的權(quán)限,需要的朋友可以參考下
    2023-04-04
  • 簡單介紹Python的Tornado框架中的協(xié)程異步實現(xiàn)原理

    簡單介紹Python的Tornado框架中的協(xié)程異步實現(xiàn)原理

    這篇文章主要介紹了簡單介紹Python的Tornado框架中的協(xié)程異步實現(xiàn)原理,作者基于Python的生成器講述了Tornado異步的特點,需要的朋友可以參考下
    2015-04-04
  • python中tkinter復(fù)選框使用操作

    python中tkinter復(fù)選框使用操作

    Python Tkinter 復(fù)選框用來選取我們需要的選項,它前面有個小正方形的方塊,如果選中則有一個對號,也可以再次點擊以取消該對號來取消選中,下面通過代碼介紹下python中tkinter復(fù)選框使用操作,需要的朋友參考下吧
    2021-11-11
  • 對于Python裝飾器使用的一些建議

    對于Python裝飾器使用的一些建議

    這篇文章主要介紹了對于Python裝飾器使用的一些建議,裝飾器是Python學(xué)習(xí)進階中的重要知識,需要的朋友可以參考下
    2015-06-06
  • Python中使用第三方庫xlrd來讀取Excel示例

    Python中使用第三方庫xlrd來讀取Excel示例

    這篇文章主要介紹了Python中使用第三方庫xlrd來讀取Excel示例,本文講解了安裝xlrd、xlrd的API、使用xlrd讀取Excel代碼示例,需要的朋友可以參考下
    2015-04-04
  • pytorch如何自定義數(shù)據(jù)集

    pytorch如何自定義數(shù)據(jù)集

    這篇文章主要介紹了pytorch自定義數(shù)據(jù)集,在識別手寫數(shù)字的例子中,數(shù)據(jù)集是直接下載的,但如果我們自己收集了一些數(shù)據(jù),存在電腦文件夾里,我們該如何把這些數(shù)據(jù)變?yōu)榭梢栽赑yTorch框架下進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練的數(shù)據(jù)集呢,即如何自定義數(shù)據(jù)集呢,需要的朋友可以參考下
    2024-01-01
  • Django利用LogEntry生成歷史操作實戰(zhàn)記錄

    Django利用LogEntry生成歷史操作實戰(zhàn)記錄

    LogEntry是在后臺開發(fā)中經(jīng)常用到的模塊,它在admin是默認開啟的。文中給大家介紹了在admin頁面上查看操作日志的方法及實戰(zhàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • python中sample函數(shù)的介紹與使用

    python中sample函數(shù)的介紹與使用

    sample()函數(shù)常用來隨機獲取dataFrame中數(shù)據(jù),可以用于快速查看,下面這篇文章主要給大家介紹了關(guān)于python中sample函數(shù)的介紹與使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    Python面向?qū)ο缶幊讨畢^(qū)間的插入詳解

    這篇文章主要為大家詳細介紹了Python面向?qū)ο缶幊虒嵗坛讨械膮^(qū)間的插入,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08

最新評論

称多县| 姜堰市| 德州市| 怀仁县| 淳化县| 德江县| 汤原县| 十堰市| 新营市| 海阳市| 贺兰县| 阳城县| 灵石县| 通化县| 布尔津县| 温泉县| 耿马| 乌什县| 睢宁县| 琼海市| 平江县| 哈尔滨市| 奉节县| 忻州市| 玉龙| 札达县| 类乌齐县| 茂名市| 宁国市| 观塘区| 哈巴河县| 临夏县| 镇平县| 武川县| 花垣县| 来安县| 武山县| 宿松县| 连江县| 邓州市| 渑池县|