#!/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) >>')
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测试数据pile(r'1[0-9]{10}')
_rQQ = re测试数据pile(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) ")
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 ")
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
##----------------------------------------------------
查看更多关于Python实现简单的电话本功能的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did89232