python手机通讯录
基本思路:列表嵌套字典
[{‘姓名’:张三,‘手机号’:XX,'邮箱:XX,‘地址’:XX},
{‘姓名’:李四,‘手机号’:XX,'邮箱:XX,‘地址’:XX},
{‘姓名’:赵五,‘手机号’:XX,'邮箱:XX,‘地址’:XX},
{‘姓名’:王六,‘手机号’:XX,'邮箱:XX,‘地址’:XX}]
通讯录功能:
一、添加联系人
要点: 判断通讯录是否为空、姓名输入是否为空、联系人是否已经存在、手机号和邮箱是否合法
二、查看通讯录
要点: 判断通讯录是否为空
三、删除联系人
要点: 判断通讯录是否为空、姓名输入是否为空、联系人是否存在
四、修改联系人
要点: 判断通讯录是否为空、姓名输入是否为空、联系人是否存在、新的手机号和邮箱是否合法,通过判断输入的新信息是否为空,判断该信息是否需要修改
五、查找联系人
要点: 判断通讯录是否为空、姓名输入是否为空、联系人是否存在
六、退出
要点: 无
功能实现思路:
将各功能写成函数,再通过最后面的功能菜单调用,清晰明了
手机号和邮箱合法性判断也需写成函数,因为在添加和修改联系人中都有使用
程序如下
定义通讯录列表
# Program:手机通讯录
# Date: 2020-05-12
# Author:是猫南北
addressBook = [] # 通讯录,用于存放联系人信息
添加联系人
def add_contacts():
# 添加联系人
while 1:
name = input("请输入联系人的姓名:")
if name.strip(): # 判断输入是否为空
for i in addressBook:
if name in i['姓名']: # 判断好友是否已经存在
print("该好友已经存在!")
return # 好友已经存在,跳出add_contacts()函数
break # 好友尚未存在,跳出while循环
else:
print("输入为空,请输入正确信息!")
phone = input("请输入联系人的手机号:")
phone = check_phone(phone) # 手机号合法性判断,确保手机号正确
email = input("请输入联系人的邮箱:")
email = check_email(email) # 邮箱合法性判断,确保邮箱正确
while 1:
address = input("请输入联系人的地址:")
if address.strip():
break # 输入不为空,跳出循环
else:
print("输入为空,请输入正确信息!")
contacts = dict(姓名=name, 手机号=phone, 邮箱=email, 地址=address) # 存储一个联系人的全部信息
addressBook.append(contacts) # 存储一个联系人的全部信息到通讯录
print("保存成功!")
查看通讯录
def view_contacts():
# 查看通讯录
if addressBook: # 判断通讯录是否为空
# 输出全部联系人信息
for i in addressBook:
for x, y in i.items():
print(x, ':', y, end=" ")
print()
print()
else:
print("通讯录无信息!")
删除联系人
def res_contacts():
# 删除联系人
if addressBook:
name_res = input("请输入要删除的好友姓名:")
t = True
if name_res.strip(): # 判断输入是否为空
for i in addressBook:
if i['姓名'] == name_res: # 判断好友是否存在
addressBook.remove(i) # 删除操作
print("删除成功!")
t = False
if t:
print("该联系人不在通讯录中!")
else:
print("输入为空!")
else:
print("通讯录无信息!")
修改联系人
def rev_contacts():
# 修改联系人
if addressBook:
name_rev = input("请输入要修改的联系人姓名:")
t = True
if name_rev.strip(): # 判断输入是否为空
for i in addressBook:
if name_rev in i['姓名']: # 判断联系人是否存在
t = False
print("若有信息无需修改,请按回车键跳过!")
name = input("请输入新的姓名:")
if name.strip(): # 判断输入是否为空,以判断该项信息是否需要修改
i['姓名'] = name
phone = input("请输入新的手机号:")
if phone.strip():
i['手机号'] = check_phone(phone) # 手机号合法性判断,并完成修改
email = input("请输入新的邮箱:")
if email.strip():
i['邮箱'] = check_email(email) # 邮箱合法性判断,并完成修改
address = input("请输入新的地址:")
if address.strip():
i['地址'] = address
# 输出修改后的联系人信息
for x, y in i.items():
print(x, ':', y, end=" ")
print()
print("保存成功!")
if t:
print("该联系人不在通讯录中!")
else:
print("输入为空!")
else:
print("通讯录无信息!")
查找联系人
def seek_contacts():
# 查找联系人
if addressBook:
name_seek = input("请输入要查找的联系人的姓名:")
t = True
if name_seek.strip(): # 判断输入是否为空
for i in addressBook:
if name_seek in i['姓名']: # 判断联系人是否存在
t = False
# 输出查找到的联系人信息
for x, y in i.items():
print(x, ':', y, end=" ")
print()
if t:
print("该联系人不在通讯录中!")
else:
print("输入为空!")
else:
print("通讯录无信息")
退出
def end():
# 退出
import sys
sys.exit() # 退出程序
手机号合法性判断
def check_phone(phone):
# 手机号合法性判断,这里只判断了号段(前三位)
# 这里使用了正则表达式 更多信息可访问菜鸟教程
import re
pattern = re.compile(r'^(13[0-9]|14[0|5|6|7|9]|15[0|1|2|3|5|6|7|8|9]|'
r'16[2|5|6|7]|17[0|1|2|3|5|6|7|8]|18[0-9]|'
r'19[1|3|5|6|7|8|9])\d{8}$')
if pattern.search(phone):
return phone # 返回合法的手机号
else:
phone = input("手机号输入有误,请重新输入:")
return check_phone(phone) # 重复进行合法性判断,并返回合法的手机号
邮箱合法性判断
def check_email(email):
# 邮箱合法性判断 这里使用了正则表达式 更多信息可访问菜鸟教程
import re
pattern = re.compile(r'^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$')
if pattern.search(email):
return email # 返回合法的邮箱
else:
email = input("邮箱输入有误,请重新输入:")
return check_email(email) # 重复进行合法性判断,并返回合法的邮箱
功能菜单
# 功能菜单
print("欢迎使用好友管理系统")
print("1:添加联系人")
print("2:查看通讯录")
print("3:删除联系人")
print("4:修改联系人")
print("5:查找联系人")
print("6:退出")
while 1:
n = input("请输入您的选项:")
# 将1~6的选项作为键,各功能函数作为值写入字典中,起到多分支选择作用
select = {'1': add_contacts, '2': view_contacts, '3': res_contacts, '4': rev_contacts, '5': seek_contacts,
'6': end}
if n in select:
select[n]() # 通过选项访问功能函数名,以调用功能函数
else:
print("输入选项错误,请重新输入!")