Python---练习:使用Python函数编写通讯录系统

预览通讯录系统最终效果

首先,进行需求分析,整个系统功能,分为6个板块,功能如下:

① 添加学员信息

② 删除学员信息

③ 修改学员信息

④ 查询学员信息

⑤ 遍历所有学员信息

⑥ 退出系统

系统共6个功能,用户根据自己需求选取

其次,根据每个部分功能,进行一步步实现。

① 显示功能界面------让用户知道这个是干嘛用的。

② 用户输入功能序号-----1  2   3   4  5  6 

③ 根据用户输入的功能序号,执行不同的功能(函数)----也就是增删改查。

☆ 定义函数------涉及各个不同功能的定义,内部功能怎么实现。

☆ 调用函数------涉及各个不同功能的调用,内部功能是否实现

注意:

模块化的编程思想是最早期的编程思想,强调把一个系统分解为若干个功能每个功能就是一个模块(函数)。当所有功能开发完毕后,则系统就完成了。

开始写代码:

① 显示功能界面-----print输入显示的内容。

② 提示用户输入要操作的功能编号--------input让用户输入编号。

③ 根据用户输入的序号执行相关功能 --------- if...elif...else

④ 如何让程序一直执行下去,而不是选择某个功能后,程序就退出了 -------while True

⑤ 根据用户输入的序号,完成系统中的每一个功能

所有功能都有使用前提:必须共享一套数据 -------info = [{}, {}, {}]

☆ 学员信息添加功能--------(add_student())


显示功能界面

先 定义函数`print_info`负责显示系统功能。

相关链接Python---函数的作用,定义,使用步骤(调用步骤)-CSDN博客


# 先定义一个函数,就是开头显示的,介绍这个系统功能,以及所有可选菜单
def print_info():print('-' * 20)print('欢迎登录学员管理系统')print('1: 添加学员信息')print('2: 删除学员信息')print('3: 修改学员信息')print('4: 查询学员信息')print('5: 遍历输出所有学员信息')print('6: 退出系统')print('-' * 20)# 调用函数
print_info()

写完先打印看看效果

继续

用户输入序号,选择功能---------使用input获取用户输入序号---要加int变整型,否则输出的是字符串,下面的if 判断无法进行

相关链接Python数据类型转换-CSDN博客

Python中的标准输入-----input()-CSDN博客


# 这里提示用户进行输入序号,以实现之后的功能。
user_num = int(input('请选择您需要的功能序号:'))

根据用户选择,执行不同的功能----------使用if  判断  用户要 的功能

相关链接 Python---if选择判断结构、嵌套结构(if elif else)_python多重if嵌套-CSDN博客


# 根据用户输入的信息,进行各种判断---进而进行之后的各种功能
if user_num == 1:print('添加学员信息')
elif user_num == 2:print('删除学员信息')
elif user_num == 3:print('修改学员信息')
elif user_num == 4:print('查询学员信息')
elif user_num == 5:print('查询学员信息')
elif user_num == 6:print('退出系统')
else:print('信息输入错误')

  因为用户可能一直操作,不确定什么时候会结束,

所以: 要一直   循环输出功能菜单直至   用户手工(也就是用户输入序号6 退出系统) ,才会 退出

① 用户选择系统功能的代码需要循环使用,直到用户主动退出系统。

② 如果用户输入1-6以外的数字,需要提示用户。

相关链接Python---死循环概念---while True-CSDN博客

Python---if选择判断结构、嵌套结构(if elif else)_python多重if嵌套-CSDN博客


#  要一直   循环输出功能菜单---用while True  死循环
while True:print_info()   # 调用的,和下面用户自己输入的,因为都是一直调用,输入,所以都在死循环内# 上面调用的print_info() ,和下面用户自己输入的,因为都是一直调用,输入,所以都在死循环内user_num = int(input('请输入您要执行的功能序号:'))if user_num == 1:print('添加学员信息')elif user_num == 2:print('删除学员信息')elif user_num == 3:print('修改学员信息')elif user_num == 4:print('查询学员信息')elif user_num == 5:print('查询学员信息')elif user_num == 6:print('退出系统')else:print('信息输入错误')

下面要进行第一个功能-----添加学员信息,关于学员信息,用列表+字典保存最合适。

☆ 定义全局列表,保存学员信息

所有功能函数都是操作学员信息,所有存储所有学员信息应该是一个全局变量,数据类型为列表。

相关链接    Python--列表及其应用场景---增、删、改、查。-CSDN博客

# 先定义一个空列表


info = []    # 添加学员信息,关于学员信息,用列表+字典保存最合适。

后续列表结构如下:------列表+字典


info = [{'name':'Tom', 'age':18, 'mobile':'13578664321'}, {'name':'Mary', 'age':18, 'mobile':'19920187732'}, {'name':'Jennifier', 'age':18, 'mobile':'18862357791'}]

添加学员信息代码实现

需求分析: 接收用户输入学员信息,并保存 判断是否添加学员信息 如果学员姓名已经存在,则报错提示 如果学员姓名不存在,则准备空字典,将用户输入的数据追加到字典 将用户字典数据追加到全局学员信息列表,最后,if条件成立的位置调用该函数

相关链接Python---函数的作用,定义,使用步骤(调用步骤)-CSDN博客

Python中的标准输入-----input()-CSDN博客

Python---global关键字---设置全局变量-CSDN博客

Python-----for循环基本语法及其应用---对序列进行遍历循环--内部会自动更新计数器(类似while循环里面的 i += 1)-CSDN博客

Python--列表及其应用场景---增、删、改、查。-CSDN博客

Python---字典的增、删、改、查操作-CSDN博客

add_info函数代码实现----   add   英 /æd/  v. 添加 


def add_info():""" 添加学员信息 """name = input('请输入学员姓名:')age = input('请输入学员年龄:')mobile = input('请输入学员电话:')global info   #  设置全局变量,让之后的每个函数,都用到这一个总的info信息for i in info:if name == i['name']:print('该用户已经存在!')returninfo_dict = {}   # 定义一个空字典,用来接收 上面已经 输入的学员信息  info_dict['name'] = name   # 结合字典的键值对,让上面输入的name、age、mobile值进来info_dict['age'] = age    # 结合字典的键值对,让上面输入的name、age、mobile值进来info_dict['mobile'] = mobile   # 结合字典的键值对,让上面输入的name、age、mobile值进来#  info 是学员信息列表格式 [],info_dict是字典格式{},二者用append结合,就是整体。info.append(info_dict)print(info)

# info 是学员信息列表格式 [],info_dict是字典格式{},二者用append结合,就是整体。-----效果如下:

删除学员信息代码实现

需求分析按用户输入的学员姓名进行删除
用户输入目标   学员姓名
检查 这个学员   是否存在
如果存在,则列表  删除这个数据
如果不存在,则提示“该用户不存在”
对应的if条件成立的位置调用该函数

python---for循环结构中的else结构(是同级关系)-CSDN博客相关链接  python---for循环结构中的else结构(是同级关系)-CSDN博客   python---for循环结构中的else结构(是同级关系)-CSDN博客

Python--列表及其应用场景---增、删、改、查。-CSDN博客

Python---for循环中的两大关键字break和continue-CSDN博客

del_info函数代码实现


# 删除学员
def del_info():"""删除学员"""# 1. 用户输入要删除的学员的姓名del_name = input('请输入要删除的学员的姓名:')global info# 2. 判断学员是否存在info(列表+字典格式中):如果输入的姓名存在则删除,否则报错提示# info中的字典:[{'name':'老王'},{'age':18},{'mobile':10086},]for i in info:#  i['name']就是i的下标从第一个开始循环遍历,每个i对应的 key 键是不是 = name,# 如果等于输入的要删除的,那就删除,没有,就报错提示。if del_name == i['name']:info.remove(i)   # remove 删除方法,直接把整个对应的字典删除break   # break终止,后面的else不运行else:print('该学员不存在')print(info)


修改  学员信息代码实现

需求分析
用户输入目标学员姓名
检查这个学员是否存在  
如果存在,则修改这位学员的信息,例如手机号
如果不存在,则报错
对应的if条件成立的位置调用该函数

Python--列表及其应用场景---增、删、改、查。-CSDN博客相关链接  

Python--列表及其应用场景---增、删、改、查。-CSDN博客

python---for循环结构中的else结构(是同级关系)-CSDN博客

modify_info函数代码实现


# 修改函数
def modify_info():"""修改函数"""# 1. 用户输入要修改的学员的姓名modify_name = input('请输入要修改的学员的姓名:')global info# 2. 判断学员是否存在:如果输入的姓名存在则修改手机号、年龄,否则报错提示for i in info:
        #  i['name']就是i的下标从第一个开始循环遍历,每个i对应的 key 键是不是 = name,# 如果等于输入的要删除的,那就删除,没有,就报错提示。if modify_name == i['name']:i['mobile'] = input('请输入新的手机号:')i['age'] = input('请输入新的年龄:')break   else:print('该学员不存在')print(info)

上面写完之后,可以试着自己运行下,看看结果对不对。

查询  学员信息代码实现

需求分析
用户输入目标学员姓名
检查学员是否存在
如果存在,则显示这个学员的信息
如果不存在,则报错提示
对应的if条件成立的位置调用该函数

相关链接  python---for循环结构中的else结构(是同级关系)-CSDN博客

Python---global关键字---设置全局变量-CSDN博客

search_info函数代码实现


# 查询学员
def search_info():"""查询学员"""# 1. 输入要查找的学员姓名:search_name = input('请输入要查找的学员姓名:')global info# 2. 判断学员是否存在:如果输入的姓名存在则显示这位学员信息,否则报错提示for i in info:if search_name == i['name']:print('查找到的学员信息如下:----------')print(f"该学员的学号是{i['id']}, 姓名是{i['name']}, 手机号是{i['mobile']}")breakelse:print('该学员不存在')

打印所有学员信息(print_all()函数代码实现)


# 显示所有学员信息
def print_all():""" 显示所有学员信息 """global infofor i in info:print(f"姓名:{i['name']},年龄:{i['age']},电话:{i['mobile']}")

退出学员管理系统

相关链接 

Python--循环中的两大关键词 break 与 continue-CSDN博客

Python----break关键字对while...else结构的影响-CSDN博客

Python---break关键字对for...else结构的影响-CSDN博客


# 是结合之前的那些
elif user_num == 6:flag = input('确认退出么? 确认请输入【yes】:')if flag == 'yes':break

所有都按照功能分为一个个不同板块,在每个版块内,结合以往掌握知识点,一步步写出来即可。

整体代码:


# 先定义一个函数,就是开头显示的,介绍这个系统功能,以及所有可选菜单
def print_info():print('-' * 20)print('欢迎登录学员管理系统')print('1: 添加学员信息')print('2: 删除学员信息')print('3: 修改学员信息')print('4: 查询学员信息')print('5: 遍历输出所有学员信息')print('6: 退出系统')print('-' * 20)info = []    # 添加学员信息,关于学员信息,用列表+字典保存最合适。def add_info():""" 添加学员信息 """name = input('请输入学员姓名:')age = input('请输入学员年龄:')mobile = input('请输入学员电话:')global info   #  设置全局变量,让之后的每个函数,都用到这一个总的info信息for i in info:if name == i['name']:print('该用户已经存在!')returninfo_dict = {}   # 定义一个空字典,用来接收 上面已经 输入的学员信息info_dict['name'] = name   # 结合字典的键值对,让上面输入的name、age、mobile值进来info_dict['age'] = age    # 结合字典的键值对,让上面输入的name、age、mobile值进来info_dict['mobile'] = mobile   # 结合字典的键值对,让上面输入的name、age、mobile值进来#  info 是学员信息列表格式 [],info_dict是字典格式{},二者用append结合,就是整体。info.append(info_dict)print(info)# 删除学员
def del_info():"""删除学员"""# 1. 用户输入要删除的学员的姓名del_name = input('请输入要删除的学员的姓名:')global info# 2. 判断学员是否存在info(列表+字典格式中):如果输入的姓名存在则删除,否则报错提示# info中的字典:[{'name':'老王'},{'age':18},{'mobile':10086},]for i in info:#  i['name']就是i的下标从第一个开始循环遍历,每个i对应的 key 键是不是 = name,# 如果等于输入的要删除的,那就删除,没有,就报错提示。if del_name == i['name']:info.remove(i)   # remove 删除方法,直接把整个对应的字典删除break   # break终止,后面的else不运行else:print('该学员不存在')print(info)# 修改函数
def modify_info():"""修改函数"""# 1. 用户输入要修改的学员的姓名modify_name = input('请输入要修改的学员的姓名:')global info# 2. 判断学员是否存在:如果输入的姓名存在则修改手机号、年龄,否则报错提示for i in info:#  i['name']就是i的下标从第一个开始循环遍历,每个i对应的 key 键是不是 = name,# 如果等于输入的要删除的,那就删除,没有,就报错提示。if modify_name == i['name']:i['mobile'] = input('请输入新的手机号:')i['age'] = input('请输入新的年龄:')breakelse:print('该学员不存在')print(info)# 查询学员
def search_info():"""查询学员"""# 1. 输入要查找的学员姓名:search_name = input('请输入要查找的学员姓名:')global info# 2. 判断学员是否存在:如果输入的姓名存在则显示这位学员信息,否则报错提示for i in info:if search_name == i['name']:print('查找到的学员信息如下:----------')print(f"该学员的学号是{i['id']}, 姓名是{i['name']}, 手机号是{i['mobile']}")breakelse:print('该学员不存在')# 显示所有学员信息
def print_all():""" 显示所有学员信息 """global infofor i in info:print(f"姓名:{i['name']},年龄:{i['age']},电话:{i['mobile']}")#  要一直   循环输出功能菜单---用while True  死循环
while True:print_info()   # 调用的,和下面用户自己输入的,因为都是一直调用,输入,所以都在死循环内# 上面调用的print_info() ,和下面用户自己输入的,因为都是一直调用,输入,所以都在死循环内user_num = int(input('请输入您要执行的功能序号:'))if user_num == 1:print('添加学员信息')elif user_num == 2:print('删除学员信息')elif user_num == 3:print('修改学员信息')elif user_num == 4:print('查询学员信息')elif user_num == 5:print('查询学员信息')elif user_num == 6:print('退出系统')flag = input('确认退出么? 确认请输入【yes】:')if flag == 'yes':breakelse:print('信息输入错误')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下: 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具,用于分析网络应用和网页,收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址,它将针对此页面运行一连…

TIME_WAIT状态套接字重新使用

《TIME_WAIT相关知识》里边有相关理论知识。 《TIME_WAIT状态TCP连接导致套接字无法重用实验》有相关实验。 现代Linux的TCP协议栈已经做了许多升级,所以可以让我们直接重用TIME_WAIT状态套接字而不会引起问题。下边是优化的内容: 1.新连接的SYN告知序列…

持续集成部署-k8s-配置与存储-存储类:动态创建NFS-PV案例

动态创建NFS-PV案例 1. 前置条件2. StorageClass 存储类的概念和使用3. RBAC 配置4. storageClass 配置5. 创建应用,测试 PVC 的自动配置6. 解决 PVC 为 Pending 状态问题7. 单独测试自动创建 PVC 1. 前置条件 这里使用 NFS 存储的方式,来演示动态创建 …

【JVM系列】- 穿插·对象的实例化与直接内存

对象的实例化与直接内存 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🌝分享学习心得,欢迎指正,大家一起学习成长! 文章目录…

域名邮箱与企业邮箱的区别:功能、应用与优势

根据使用者的不同需求,电子邮件分为域名邮箱和企业邮箱两种类型。那么这两种邮箱之间究竟存在哪些区别呢?本文将从定义、优势和劣势三个方面进行详细解析。 什么是域名邮箱? 域名邮箱,顾名思义是以域名作为后缀的电子邮箱。域名邮…

【UGUI】制作用户注册UI界面

这里面主要的操作思想就是 1.打组 同一个事情里面包含两个UI元素都应该打组便于管理和查找 2.设置锚点位置 每次创建一个UI都应该设置他的锚点以便于跟随画布控制自己的:相对位置 3. 设置尺寸(像素大小) 每一次UI元素哪怕是作为父物体的…

我叫:归并排序【JAVA】

1.认识我一下 1.归并排序(MERGE-SORT)利用归并的思想实现的排序方法,该算法采用经典的分治策略2.分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。 2.分合思想 3 分久必合 /*** 合并** param arr …

(数据结构)顺序表的定义

#include<stdio.h> //顺序表的实现——静态分配 #define MAX 10 //定义最大长度 typedef struct List {int data[MAX]; //用静态的数组存放数据int lenth; //顺序表现在的长度 }List; //顺序表的初始化 void ChuShiHua(List L) {L.lenth 0; //将顺序表的长度初始化…

YOLOv8优化策略:自适应改变核大小卷积AKConv,效果优于标准卷积核和DSConv |2023.11月最新成果

🚀🚀🚀本文改进: AKConv 中,通过新的坐标生成算法定义任意大小的卷积核的初始位置。 为了适应目标的变化,引入了偏移量来调整每个位置的样本形状。 此外,我们通过使用具有相同大小和不同初始采样形状的 AKConv 来探索神经网络的效果。 AKConv 通过不规则卷积运算完成…

【备忘录】软件记录

Anaconda 虚拟环境 创建Python环境 Spyder Python程序编辑 Jupyter Notebook 交互式开发环境

Spring第二课响应的完全,如何理解前后端互联

目录 一、响应 Control,RestController 1.Controller的源码&#xff0c;代表什么意思 2.返回数据 Responsebody 3.返回HTML片段 4.返回JSON 5.那么假如我们使用集合会怎么样呢 设置状态码&#xff0c;虽然不影响展示&#xff0c;但是确实显示起来也就是401的情况。 2.我…

[设计模式] 常见的设计模式

文章目录 设计模式的 6 大设计原则设计模式的三大分类常见的设计模式有哪几种1. 单例模式&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。&#xff08;连接池&#xff09;1. 饿汉式2. 懒汉式3. 双重检测 2. 工厂模式3. 观察者模式● 推模型● 拉…

自动化横行时代,手工测试如何突破重围?测试之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试是每个…

WiseAlign 软件运行中存图功能使用方法

WiseAlign 软件运行中存图功能使用方法 在需要存图的相机图像通道点击鼠标右键 在弹出的菜单中选择“图像操作——保存图像” 选择想要存放图片的文件夹&#xff08;如下图所示&#xff09; 修改文件名称 如果文件夹中已有同名文件会提示xxx.bmp文件已存在&#xff0c;是否需要…

【【Linux开发环境搭建与软件的安装】】

Linux开发环境搭建与软件的安装 下面我们来讲述 Ubuntu 系统搭建 tftp 服务器 TFTP 需要一个文件夹来存放文件&#xff0c;我们在根目录下新建一个/tftpboot 目录做为 TFTP 文件存储目录&#xff0c;之所以使用该目录是因为后面使用的 Petalinux 工具默认使用该目录&#xff0…

Spring Cloud,注册中心,配置中心,原理详解

文章目录 Spring Cloud&#xff0c;注册中心&#xff0c;配置中心&#xff0c;原理详解谈谈我个人对 spring Cloud 的理解 注册中心Eureka&#xff1a;服务搭建小结 Ribbo - 负载均衡1. 负载均衡流程2. 负载均衡策略 nacos注册中心1. 配置集群1. 创建 namespace2. 配置命名空间…

核密度估计法(KDE)的概念,应用,优点,缺点,以及与正态分布(高斯分布)的区别,以及与概率分布的区别联系。看完你就真正捋清这些概念了

文章目录 前言一、核密度估计法&#xff08;KDE&#xff09;是什么&#xff1f;二、核密度估计法的步骤如下&#xff1a;三、核密度的应用&#xff1a;四、核密度估计法的优点&#xff1a;五、核密度估计法的缺点&#xff1a;六、核密度估计法和正态分布的区别在于&#xff1a;…

注解方式优雅的实现Redisson分布式锁

1.前言 随着微服务的快速推进&#xff0c;分布式架构也得到蓬勃的发展&#xff0c;那么如何保证多进程之间的并发则成为需要考虑的问题。因为服务是分布式部署模式&#xff0c;本地锁Reentrantlock和Synchnorized就无法使用了&#xff0c;当然很多同学脱口而出的基于Redis的se…

【机器学习】平滑滤波

平滑滤波技术 平滑滤波&#xff0c;顾名思义就是对信号进行处理使之整体显得更加平滑&#xff0c;降低噪声影响&#xff0c;提高信号质量&#xff0c;它常见于数字信号处理和图像处理&#xff0c;一般意义上的数字信号多体现于一维数据&#xff0c;图像信号多体现于二维数据。…

OCR常用数据集_看数据集区分可识别语言

这里写目录标题 COCO-TEXT 英文Total-Text 英文少量中文IIIT5K[50]、IC03[44]、IC13[34]、IC15[33]、CT80[56]MJSynth 英文SynthText分层文本数据集 (HierText) 英文TextOCR和IntelOCR &#xff1f;&#xff1f;&#xff1f;Multi-language dataset (IC19)RCTW17 主要中文MSRA-…