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告知序列…

post请求乱码

如果在处理 POST 请求时出现乱码&#xff0c;你可以配置一个过滤器&#xff08;Filter&#xff09;来处理请求体的字符编码。以下是一个简单的 Java Servlet 过滤器的例子&#xff0c;用于设置请求和响应的字符编码&#xff1a; 在 web.xml 中配置过滤器&#xff1a; <filt…

MyBatis-Plus简介和入门操作

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

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

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

AI数字人与虚拟人:区别与应用场景

随着人工智能和虚拟技术的不断发展&#xff0c;AI数字人和虚拟人成为了数字世界中的两个重要概念。本文将介绍AI数字人和虚拟人的区别&#xff0c;并探讨它们在不同领域的应用场景。 一、AI数字人与虚拟人的区别 定义和概念&#xff1a; AI数字人&#xff1a;是利用人工智能技术…

MFC—CTabCtrl 、CListCtrl

为了方便自己查找 1、官方文档 CTabCtrl CListCtrl 2、create&#xff08;窗口样式&#xff09; 基本上安流程来都能出出来。看一下视图的窗口样式。主要是report的。 CTabCtrl选项卡控件样式 CListCtrl列表视图窗口样式&#xff08;这里的名字又变了&#xff0c;List-Vi…

单例模式-支持并发的C语言实现

代码实现&#xff1a; c #include <stdio.h> #include <stdlib.h> #include <pthread.h>// 定义单例对象结构体 typedef struct {// 单例对象的数据成员int value; } Singleton;// 静态变量&#xff0c;用于保存唯一实例的指针 static Singleton* instance …

wireshark 抓包提示

[TCP Previous segment not captured] 在TCP的传输阶段&#xff0c;同一台主机发出的数据段应该是连续的&#xff0c;即后一个包的Seq等于前一个包的SeqLen&#xff08;三次握手和四次挥手是个例外&#xff09;。如果wireshark发现后一个包的Seq号大于前一个包的SeqLen&#xf…

28. Spring源码篇依赖注入之Optional

简介 我们知道&#xff0c;java中的Optional是解决臭名昭著的空指针异常&#xff0c;在spring的依赖注入中&#xff0c;如果没有找到Bean也会抛异常&#xff0c;就算将required写为false&#xff0c;后面也会需要判空 在spring中也支持Optional的依赖注入 创建Optional jav…

【TinyALSA全解析(一)】TinyALSA简介

TinyALSA简介 一、TinyALSA概述1.1 TinyALSA背景和用途1.2 TinyALSA主要内容1.3 TinyALSA与ALSA的关系 二、TinyALSA具体有哪些内容2.1 libtinyalsa.so 库2.2 一组工具 三、tinyalsa完整目录分析四、tinyalsa的编译方法和使用方法4.1 tinyalsa编译方法4.1.1 TinyALSA全编译方法…

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

对象的实例化与直接内存 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大家一起学习成长&#xff01; 文章目录…

SpringCloud系列文章目录(总纲篇)

文章目录 前言正文一、原理性文章1.1 OpenFeign篇 二、实战性文章1.1 注册中心、配置中心篇1.2 网关篇1.3 OpenFeign篇 前言 SpringCloud系列文章&#xff0c;有些文章上下文存在联系。 并且&#xff0c;它们数量巨多&#xff0c;有涉及原理的&#xff0c;有涉及实战的。 本文…

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

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

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

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

我叫:归并排序【JAVA】

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

tp6框架 万级数据入库

用框架自带的saveall方法 当数据超过一千就会出现遗漏的情况 下面是原生sql方法&#xff1a; function saveCourse($newArr, $count) {$sql "replace into edu_wx_school_self_course (study_hour,code,cn_name,en_name,study_score,school_qy) values";for ($a…

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

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

Tensorflow检测不到GPU解决办法(针对本人4060有效)

目录 前置条件硬件条件当前日期 检查方法解决方法版本列表tensorflow2.10.0CUDA12.1cudnn8.8 结果 前置条件 硬件条件 R5-5600G RTX4060 当前日期 当前时间是2023年11月27日&#xff0c;请注意本文的时效性&#xff0c;保不齐后续出现某个组件的更新能够直接解决这个问题。…

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

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