# 定义一个字典用于暂存信息(程序结束,数据删除)
contacts = dict()
input_buf = '请输入序号:'
while True:
# 打印菜单界面
print(f''' {"="*8}手机通讯录{"="*8}
1.添加联系人\t\t2.查看联系人
3.删除联系人\t\t4.修改联系人
5.查找联系人\t\t0.退出''')
# 选择菜单
choice_menu = input(input_buf)
input_buf = '请输入序号:'
# 防止输入非范围内的字符
if choice_menu not in tuple('012345'):
input_buf = '请重新输入序号:'
continue
# 1.添加联系人 ============================
elif choice_menu == '1':
print(1)
# 2.查看联系人 ============================
elif choice_menu == '2':
print(2)
# 3.删除联系人 ============================
elif choice_menu == '3':
print(3)
# 4.修改联系人 ============================
elif choice_menu == '4':
print(4)
# 5.查找联系人 ============================
elif choice_menu == '5':
print(5)
# 0.退出 ============================
else:
print(f'{"="*6}已退出手机通讯录{"="*6}')
break
运行结果:
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请输入序号:1
1
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请输入序号:9
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请重新输入序号:a
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请重新输入序号:0
======已退出手机通讯录======
# 1.添加联系人 ============================
elif choice_menu == '1':
print(f' {"=" * 8}添加联系人{"=" * 8}')
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
name = input('请输入名字:')
if name != '' and name != ' ':
break
while True:
phone = input('请输入手机号码:')
if phone != '' and phone != ' ':
break
while True:
email = input('请输入邮箱:')
if email != '' and email != ' ':
break
while True:
address = input('请输入地址:')
if address != '' and address != ' ':
break
keys_name += 1
# 数据写入字典
contacts[keys_name] = {'name': name, 'phone': phone, 'email': email, 'address': address}
# print(contacts)
print('已保存成功')
# 2.查看联系人 ============================
elif choice_menu == '2':
print(f' {"=" * 8}查看联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
# 遍历打印通讯录
for i in contacts.values():
# print(i)
print(f"姓名:{i['name']}\t手机号码:{i['phone']}\t邮箱:{i['email']}\t住址:{i['address']}")
# 3.删除联系人 ============================
elif choice_menu == '3':
print(f' {"=" * 8}删除联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要删除的名字:')
name_count = 0 # 记录重名的次数
keys_buf = list() # 存储重名的键值,方便字典索引
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
keys_buf.append(i) # 把找到名字的字典键值追加到列表中
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 多个重名选择删除
if name_count > 1:
name_choice = int(input('请选择需要删除名字的序号:'))
for i in range(name_count):
if (name_choice-1) == i:
contacts.pop(keys_buf[i]) # 删除字典元素
print('已删除成功!')
# 只有一个删除
elif name_count == 1:
contacts.pop(keys_buf[0]) # 删除字典元素
print('已删除成功!')
# 找不到此人
else:
print('此人不在通讯录,请确认输入是否有误!')
# 4.修改联系人 ============================
elif choice_menu == '4':
print(f' {"=" * 8}修改联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要修改的名字:')
name_count = 0 # 记录重名的次数
keys_buf = list() # 存储重名的键值,方便字典索引
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
keys_buf.append(i) # 把找到名字的字典键值追加到列表中
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 多个重名选择修改
if name_count > 1:
name_choice = int(input('请选择需要修改名字的序号:'))
for i in range(name_count):
if (name_choice - 1) == i:
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
new_name = input('请输入新的名字:')
if new_name != '' and new_name != ' ':
break
while True:
new_phone = input('请输入新的手机号码:')
if new_phone != '' and new_phone != ' ':
break
while True:
new_email = input('请输入新的邮箱:')
if new_email != '' and new_email != ' ':
break
while True:
new_address = input('请输入新的地址:')
if new_address != '' and new_address != ' ':
break
# 新数据覆盖字典
contacts[keys_buf[i]] = {'name': new_name, 'phone': new_phone,
'email': new_email, 'address': new_address}
# print(contacts)
print('已修改成功')
# 只有一个删除
elif name_count == 1:
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
new_name = input('请输入新的名字:')
if new_name != '' and new_name != ' ':
break
while True:
new_phone = input('请输入新的手机号码:')
if new_phone != '' and new_phone != ' ':
break
while True:
new_email = input('请输入新的邮箱:')
if new_email != '' and new_email != ' ':
break
while True:
new_address = input('请输入新的地址:')
if new_address != '' and new_address != ' ':
break
# 数据覆盖字典
contacts[keys_buf[0]] = {'name': new_name, 'phone': new_phone,
'email': new_email, 'address': new_address}
# print(contacts)
print('已修改成功')
# 找不到此人
else:
print('此人不在通讯录,请确认输入是否有误!')
# 5.查找联系人 ============================
elif choice_menu == '5':
print(f' {"=" * 8}查找联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要查找的名字:')
name_count = 0 # 记录重名的次数
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 找不到此人
if name_count == 0:
print('此人不在通讯录,请确认输入是否有误!')
"""
用字典模拟手机通讯录
知识点:
1、嵌套字典使用
2、字典增删改查
3、嵌套循环/条件语句/跳转语句
4、数据类型转换/元素索引
改善与不足:
1、代码块很臃肿,有很多重复的代码,如果使用函数就能避免
2、在多个重名选择输入序号时,没有做限制
3、程序结束,数据删除,无法保存
"""
# 定义一个字典用于暂存信息(程序结束,数据删除)
contacts = dict()
input_buf = '请输入序号:'
keys_name = 0 # 字典键值命名
# 功能实现 ===========================================================
while True:
# 打印菜单界面
print(f''' {"=" * 8}手机通讯录{"=" * 8}
1.添加联系人\t\t2.查看联系人
3.删除联系人\t\t4.修改联系人
5.查找联系人\t\t0.退出''')
# 选择菜单
choice_menu = input(input_buf)
input_buf = '请输入序号:'
# 防止输入非范围内的字符
if choice_menu not in tuple('012345'):
input_buf = '请重新输入序号:'
continue
# 1.添加联系人 ====================================================
elif choice_menu == '1':
print(f' {"=" * 8}添加联系人{"=" * 8}')
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
name = input('请输入名字:')
if name != '' and name != ' ':
break
while True:
phone = input('请输入手机号码:')
if phone != '' and phone != ' ':
break
while True:
email = input('请输入邮箱:')
if email != '' and email != ' ':
break
while True:
address = input('请输入地址:')
if address != '' and address != ' ':
break
keys_name += 1
# 数据写入字典
contacts[keys_name] = {'name': name, 'phone': phone, 'email': email, 'address': address}
# print(contacts)
print('已保存成功')
# 2.查看联系人 ====================================================
elif choice_menu == '2':
print(f' {"=" * 8}查看联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
# 遍历打印通讯录
for i in contacts.values():
# print(i)
print(f"姓名:{i['name']}\t手机号码:{i['phone']}\t邮箱:{i['email']}\t住址:{i['address']}")
# 3.删除联系人 ====================================================
elif choice_menu == '3':
print(f' {"=" * 8}删除联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要删除的名字:')
name_count = 0 # 记录重名的次数
keys_buf = list() # 存储重名的键值,方便字典索引
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
keys_buf.append(i) # 把找到名字的字典键值追加到列表中
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 多个重名选择删除
if name_count > 1:
name_choice = int(input('请选择需要删除名字的序号:'))
for i in range(name_count):
if (name_choice - 1) == i:
contacts.pop(keys_buf[i]) # 删除字典元素
print('已删除成功!')
# 只有一个删除
elif name_count == 1:
contacts.pop(keys_buf[0]) # 删除字典元素
print('已删除成功!')
# 找不到此人
else:
print('此人不在通讯录,请确认输入是否有误!')
# 4.修改联系人 ====================================================
elif choice_menu == '4':
print(f' {"=" * 8}修改联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要修改的名字:')
name_count = 0 # 记录重名的次数
keys_buf = list() # 存储重名的键值,方便字典索引
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
keys_buf.append(i) # 把找到名字的字典键值追加到列表中
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 多个重名选择修改
if name_count > 1:
name_choice = int(input('请选择需要修改名字的序号:'))
for i in range(name_count):
if (name_choice - 1) == i:
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
new_name = input('请输入新的名字:')
if new_name != '' and new_name != ' ':
break
while True:
new_phone = input('请输入新的手机号码:')
if new_phone != '' and new_phone != ' ':
break
while True:
new_email = input('请输入新的邮箱:')
if new_email != '' and new_email != ' ':
break
while True:
new_address = input('请输入新的地址:')
if new_address != '' and new_address != ' ':
break
# 新数据覆盖字典
contacts[keys_buf[i]] = {'name': new_name, 'phone': new_phone,
'email': new_email, 'address': new_address}
# print(contacts)
print('已修改成功')
# 只有一个删除
elif name_count == 1:
# 防止输入空字符和首字符空格' '(无法防止多个空格输入)
while True:
new_name = input('请输入新的名字:')
if new_name != '' and new_name != ' ':
break
while True:
new_phone = input('请输入新的手机号码:')
if new_phone != '' and new_phone != ' ':
break
while True:
new_email = input('请输入新的邮箱:')
if new_email != '' and new_email != ' ':
break
while True:
new_address = input('请输入新的地址:')
if new_address != '' and new_address != ' ':
break
# 数据覆盖字典
contacts[keys_buf[0]] = {'name': new_name, 'phone': new_phone,
'email': new_email, 'address': new_address}
# print(contacts)
print('已修改成功')
# 找不到此人
else:
print('此人不在通讯录,请确认输入是否有误!')
# 5.查找联系人 ====================================================
elif choice_menu == '5':
print(f' {"=" * 8}查找联系人{"=" * 8}')
# 是否为空字典
if contacts == dict():
print('哦豁,此手机通讯录无数据!!!')
continue
name = input('请输入需要查找的名字:')
name_count = 0 # 记录重名的次数
# 遍历查找此人
for i in contacts:
if contacts[i]['name'] == name:
name_count += 1 # 重名计数
print(f"{name_count}.姓名:{contacts[i]['name']}\t"
f"手机号码:{contacts[i]['phone']}\t"
f"邮箱:{contacts[i]['email']}\t"
f"住址:{contacts[i]['address']}")
# 找不到此人
if name_count == 0:
print('此人不在通讯录,请确认输入是否有误!')
# 0.退出 ==========================================================
else:
print(f'{"=" * 6}已退出手机通讯录{"=" * 6}')
break
运行结果:
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请输入序号:5
========查找联系人========
哦豁,此手机通讯录无数据!!!
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请输入序号:1
========添加联系人========
请输入名字:周华
请输入手机号码:1008611
请输入邮箱:123.com
请输入地址:广州
已保存成功
========手机通讯录========
1.添加联系人 2.查看联系人
3.删除联系人 4.修改联系人
5.查找联系人 0.退出
请输入序号:2
========查看联系人========
姓名:周华 手机号码:1008611 邮箱:123.com 住址:广州
作者:周华
创作日期:2023/9/27