Python 实现简单的电话本功能
程序员文章站
2022-05-20 09:01:27
...
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) >>') 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) ") 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 ##----------------------------------------------------
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: 什么开发语言可以替代PHP?
下一篇: iOS与JS交互的方法之间的对比介绍
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论