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

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

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

myPhoneBook2.py

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

  該腳本能夠?qū)崿F(xiàn)
  AddContact:添加聯(lián)系人信息
  ShowContact:查找姓名顯示聯(lián)系人
  SaveContacts:存儲(chǔ)聯(lián)系人到 TXT 文檔(存儲(chǔ)格式——姓名:號(hào)碼/號(hào)碼)
  LoadContacts:從 txt 文檔中載入聯(lián)系人
  '''
  def __init__(self):
    self.contactsDict = {}

  def AddContact(self):
    while True:
      name = raw_input('請(qǐng)輸入姓名>>>')
      name = name.strip()
      # 姓名必須包含有效字符
      if name != '':
        break
      print '***姓名不能為空'
       
    while True:
      number = raw_input('請(qǐng)輸入號(hào)碼>>>')
      number = re.sub(r'\D', '', number)
      # 刪除號(hào)碼中的非數(shù)字字符
      if number != '':
        break
      print '***號(hào)碼只能是數(shù)字'

    cover = True #若聯(lián)系人已存在,是否覆蓋
    if self.contactsDict.has_key(name):
      print '***聯(lián)系人已存在'
      self.ShowContact(name)
      while True:
        control = raw_input('''
輸入 "c":覆蓋原來(lái)號(hào)碼
輸入 "n":保留原來(lái)號(hào)碼并存儲(chǔ)新號(hào)碼
輸入 "q" 退出\n>>>''')
        if control.lower() == 'n':
          cover = False
          break
        if control.lower() == 'c':
          break
        if control.lower() == 'q':
          return None
        print '***輸入錯(cuò)誤'
     
    if cover:
      self.contactsDict[name] = number
    else:
      if number in self.contactsDict[name]:
        print '***號(hào)碼已經(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 '【號(hào)碼%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 '''
請(qǐng)輸入要?jiǎng)h除號(hào)碼的序號(hào)
或者輸入 "a" 刪除該聯(lián)系人
或者輸入 "q" 退出(不刪除)
(若聯(lián)系人號(hào)碼被全部刪除,該聯(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 '***沒(méi)有聯(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('請(qǐng)輸入要查找的聯(lián)系人姓名\n>>>')
        myPhoneBook.ShowContact(name)
      elif control.lower() == 'd':
        name = raw_input('請(qǐng)輸入要?jiǎng)h除的聯(lián)系人姓名\n>>>')
        myPhoneBook.DeleteNumber(name)
      elif control.lower() == 'q':
        break
      else:
        print '***輸入有誤'
       
  finally:
    myPhoneBook.SaveContacts()

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

#-*- coding:utf-8 -*- 
# file :addrList.py 
# date :2011-10-24 15:40:13 
# 設(shè)計(jì)一個(gè)基本的通訊錄管理程序,使其具有添加,刪除,編輯,查找等功能。 
# 要求使用C/C++,java,javascript,python中任意一種語(yǔ)言實(shí)現(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("錯(cuò)誤:您輸入的命令有誤,請(qǐng)重新輸入。需要幫助請(qǐng)輸入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 "姓名太長(zhǎng)了!" 
  if not _rPhone.match(items[1]): 
    _flag = False 
    print "手機(jī)號(hào)碼格式不正確" 
  if not _rQQ.match(items[2]): 
    _flag = False 
    print "QQ號(hào)碼輸入有誤" 
  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)中暫無(wú)記錄!" 
    return None 
  printHead() 
  for key,addr in _addrs_dict.items(): 
    printAddr(key,addr) 
 
def doFind(): 
  _flag=False 
  flag1=flag2=flag3=False 
  cond=raw_input("請(qǐng)輸入查詢信息:>") 
  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 "沒(méi)有查找到任何聯(lián)系人!" 
 
def doAdd(): 
  line = raw_input("請(qǐng)依次輸入聯(lián)系人的姓名,手機(jī)號(hào)碼,QQ號(hào)碼>") 
  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("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人的編號(hào)(取消請(qǐng)輸入#)") 
    if key == '#': 
      FLAG = False 
      continue 
    if not existsId(int(key,10)): 
      print "不存在您所輸入編號(hào)的聯(lián)系人。請(qǐng)確認(rèn)" 
      continue 
   
    print "編號(hào)為 {0} 的聯(lián)系人信息如下:".format(key) 
    printById(int(key,10)) 
    yesOrNo=raw_input("您確定要?jiǎng)h除上述聯(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("請(qǐng)輸入要編輯的聯(lián)系人的編號(hào)(取消請(qǐng)輸入#)") 
    print "DEBUG:key:{0}".format(key) 
    if key == '#': 
      FLAG = False 
      continue 
    if not existsId(int(key,10)): 
      print "不存在您所輸入編號(hào)的聯(lián)系人。請(qǐng)確認(rèn)" 
      continue 
   
    print "編號(hào)為 {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 "|編號(hào) |  姓名  | 手機(jī)號(hào)碼   |   QQ號(hào)碼  |" 
  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 "請(qǐng)輸入該聯(lián)系人的新信息,相應(yīng)留空則保留原有信息" 
  name=raw_input("請(qǐng)輸入新姓名:>") 
  if len(name) > 0: 
    _addr['name']=name 
 
  phone=raw_input("請(qǐng)輸入新手機(jī)號(hào)碼:>") 
  if len(phone) > 0: 
    _addr['phone']=phone 
 
  qq=raw_input("請(qǐng)輸入新的QQ號(hào)碼:>") 
  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("請(qǐng)?jiān)诖颂庉斎氩藛蚊?gt;") 
    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ū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python中l(wèi)ogging日志模塊代碼調(diào)試過(guò)程詳解

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

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

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

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

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

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

    對(duì)于Python裝飾器使用的一些建議

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

    Python中使用第三方庫(kù)xlrd來(lái)讀取Excel示例

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

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

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

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

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

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

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

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

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

最新評(píng)論

富裕县| 塔城市| 明溪县| 青冈县| 南城县| 奉节县| 龙口市| 德化县| 东乡| 彰武县| 台南县| 昌宁县| 山西省| 秦皇岛市| 临江市| 宁城县| 高雄县| 岑溪市| 兰西县| 金川县| 青浦区| 定日县| 汝州市| 克什克腾旗| 怀化市| 诏安县| 花莲市| 上饶县| 武隆县| 塔城市| 嘉峪关市| 沁阳市| 城市| 旺苍县| 沙田区| 南丰县| 三台县| 锦屏县| 陈巴尔虎旗| 鲜城| 高安市|