Python 用嵌套字典实现手机通讯录(详解版)

这篇具有很好参考价值的文章主要介绍了Python 用嵌套字典实现手机通讯录(详解版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、先搭建一个框架。有条理地把要实现的功能罗列出来!

# 定义一个字典用于暂存信息(程序结束,数据删除)
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.添加联系人

# 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.查看联系人

# 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.删除联系人

# 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.修改联系人

# 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.查找联系人

# 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文章来源地址https://www.toymoban.com/news/detail-769293.html

到了这里,关于Python 用嵌套字典实现手机通讯录(详解版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机通讯录的实现——C语言(静态版本)

    目录 一:通讯录的思想 二:通讯录的实现 1.创建文件 2.打印菜单 3.创建联系人结构体 4.初始化菜单 5.实现菜单的功能 a.增加联系人 b.删除联系人 c.查找联系人 d.修改联系人 e.打印联系人 三:总结 我们将每一位联系人的姓名,性别,年龄,电话,地址来用一个结构体保存,用

    2024年02月09日
    浏览(42)
  • C语言实现建立手机通讯录(顺序结构)

    今天来和大家分享一个简易通讯录(C语言实现) 首先要介绍一下通讯录的基本功能 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 总结,考虑到数据结构中的顺序表和单链表,我们可以采用这两种结构来实现。本文选择

    2024年02月07日
    浏览(41)
  • 手机通讯录--课后程序(Python程序开发案例教程-黑马程序员编著-第5章-课后作业)

    通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中新增联系人,或修改、删除联系人信息。下面是一个常见通讯录的功能菜单,如图1所示。   图1

    2024年02月01日
    浏览(59)
  • 简单步骤:Android studio 内容提供者 - 实现建立手机通讯录界面,读取系统联系人

    提示:本篇文章将会尽量保持精简,同时请诸位敲写代码时保持耐心,三连是最大的支持! 文章目录 前言 一、项目介绍 二、使用步骤 1.创建程序 2.添加 recyclerview-v7 库 3.放置界面控件 4.搭建界面布局 5.封装实体类 6.编写数据适配器 7.实现显示界面数据功能 8.去掉默认标题栏

    2024年02月08日
    浏览(57)
  • Android手机通讯录制作

    设计一个基于Android的手机通讯录,此通讯录包括添加、搜索、修改、删除联系人的功能。 添加、编辑、删除功能 点击通讯录主界面选项菜单中的“添加联系人”菜单项,进入添加联系人界面,输入联系人的基本信息,包括姓名、手机号码、家庭地址、单位名称、Email、QQ号这

    2024年02月08日
    浏览(59)
  • Android手机通讯录(上)

    可以实现添加联系人,删除联系人,修改联系人,查找号码,查询联系人信息等功能。 具体实现界面如图所示。 相关代码介绍如下: Android项目配置AndroidManifest.xml 手机通讯录程序主界面类MyContactsActivity.java 手机通讯录程序数据库类MyDB.java 手机通讯录程序添加、编辑、查看信

    2024年02月12日
    浏览(53)
  • 通讯录文件如何导入手机简单方法

    今天要和大家分享的是,如何将通讯录文件导入华为手机。最简单的方法是直接通过微信或QQ将通讯录文件传输到手机之上,而不需要使用第三方工具。。 通讯录文件指的是vCard文件,也称为vcf文件。通常是手机和通讯录工具导出的文件。可以很方便地导入到其他手机之上。

    2024年02月16日
    浏览(43)
  • 基于Android的手机通讯录设计

    目 录 1.系统描述 1 1.1 问题描述 1 1.2 功能描述 1 1.3 数据需求 2 1.4 设计意义 2 2.背景介绍 2 2.1 Android系统概述 2 2.2 Android开发组件 4 2.2.1 Activity组件 4 2.2.2 Service 组件 7 2.2.3 BroadcastReceiver 组件 8 2.2.4 Content Provider 组件 8 2.3 Android数据库 9 2.3.1 SQLite数据库 9 2.3.2 SQLite数据库特点 10

    2024年02月09日
    浏览(79)
  • c++手机通讯录管理系统280

    定制魏:QTWZPW,获取更多源码等 目录 软件达到的目的 功能分析说明图  各项功能说明  主要数据结构类型  各个模块之间的调用关系和数据储存格式说明  各软件模块之间的调用方式  软件中实现各项功能的函数与程序主要代码  软件使用结果  添加联系人 显示联系人 拨

    2024年04月12日
    浏览(78)
  • 苹果手机怎么恢复通讯录联系人

    随着社交媒体和移动互联网的快速发展,手机已经成为我们日常生活不可或缺的一部分。在手机中,通讯录联系人是我们很重要的一部分数据,这些联系人包括亲友、同事、客户等等。但有时候,由于各种原因,我们可能会不小心删除或者丢失这些重要的联系人信息。这时候

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包