python 基础综合应用——小开发
#python 基础综合应用——小开发
综合复习
- 变量- 循环- 函数- 模块
开发 名片管理系统
名片管理系统介绍
名片管理系统可以理解成花名册软件,通过个人新建人的信息后可以进行查询等简单操作的程序
名片管理系统有三个作用,
1.新建名片
2.显示全部名片
3.查询名片
欢迎使用【名片管理系统】V1.0
1. 新建名片
2. 显示全部
3. 查询名片
0. 退出系统
名片管理系统的开发
1.框架的搭建
在我们开发程序的时候都需要做的事情就是构建框架
构建框架首先需要做的就是准备文件(文件需要的是主文件和工具文件),还需要准备一些基本的代码能够简单运行起来
对于**准备文件,主文件是main文件,**所有的操作都要经过这里启动
对于**工具文件,**就是对于这个程序进行其他操作(删除,增添)
先创建 一个main文件
无限循环
- 在开发软件时,如果 不希望程序执行后 立即退出 - 可以在程序中增加一个 无限循环 - 由用户来决定 退出程序的时机
当用户输入数字进行程序之后,即为正确运行,那对于**正确(true)**之后主文件进行后续的操作
while True:
# TODO(小明) 显示系统菜单
action = input("请选择操作功能:")
print("您选择的操作是:%s" % action)
# 根据用户输入决定后续的操作if action in ["1", "2", "3"]:passelif action == "0":print("欢迎再次使用【名片管理系统】")
breakelse:print("输入错误,请重新输入")
在这里需要注意的是
- 使用
in
针对 列表 判断,避免使用or
拼接复杂的逻辑条件 1. 没有使用int
转换用户输入,可以避免 一旦用户输
pass
就是一个空语句,不做任何事情,一般用做占位语句 - 是为了保持程序结构的完整性
对于工具文件
在名片管理系统中,工具文件的作用就是
1.显示菜单
2.新建名片
3.显示全部
4.搜索名片
所以对于工具文件,我们采取的方式是,创造四个函数
def show_menu():
"""显示菜单"""pass
def new_card():
"""新建名片"""print("-" * 50)print("功能:新建名片")
def show_all():
"""显示全部"""print("-" * 50)print("功能:显示全部")
def search_card():
"""搜索名片"""print("-" * 50)print("功能:搜索名片")
注意:三个引号的作用是一个一个输出
在做好主文件和工具文件之后我们应该进行的操作是将工具文件的四个函数导入进行优化操作
用import
import cards_tools
while True:
cards_tools.show_menu()
action = input("请选择操作功能:")
print("您选择的操作是:%s" % action)
# 根据用户输入决定后续的操作if action in ["1", "2", "3"]:
if action == "1":cards_tools.new_card()
elif action == "2":cards_tools.show_all()
elif action == "3":cards_tools.search_card()
elif action == "0":print("欢迎再次使用【名片管理系统】")
breakelse:print("输入错误,请重新输入:")
至此我们的名片管理系统的操作就大致**完成了 **
接下来就是完善每一个工具文件的函数操作
2.新建名片
之前的文章说过,程序是用来运行数据的,变量是存储数据的
那么我们用户需要新建名片那么就,需要保存信息到字典中,将名片字典添加到列表中,这个时候我们用户就添加成功
定义名片列表变量
-
在
cards_tools
文件的顶部增加一个 列表变量 -
# 所有名片记录的列表
card_list = []def new_card():
“”“新建名片
“””
print(“-” * 50)
print(“功能:新建名片”)
-
1. 提示用户输入名片信息
name = input(“请输入姓名:”)
phone = input(“请输入电话:”)
qq = input(“请输入 QQ 号码:”)
email = input(“请输入邮箱:”)
2. 将用户信息保存到一个字典
card_dict = {“name”: name,
“phone”: phone,
“qq”: qq,
“email”: email}
3. 将用户字典添加到名片列表
card_list.append(card_dict)
print(card_list)4. 提示添加成功信息
print(“成功添加 %s 的名片” % card_dict[“name”])
3.显示所有名片
若想显示所有名片,现在的情况是名片字典全部放到列表中,所以说我们可以直接把列表全部输出即可注意:为了有更好的显示效果,我们应该制作表头的分割线方便用户观看,则有如下代码
def show_all():"""显示全部"""print("-" * 50)print("功能:显示全部")
# 打印表头for name in ["姓名", "电话", "QQ", "邮箱"]:print(name, end="\t\t")
print("")
# 打印分隔线print("=" * 50)
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))
注意的是
def show_all():"""显示全部"""print("-" * 50)print("功能:显示全部")
# 1. 判断是否有名片记录if len(card_list) == 0:print("提示:没有任何名片记录")
return
return可以返回一个函数的结果
下方代码不会被执行 ,这样子就避免了后续操作,用户可以直接了解到,没有名片代码的记录,提示用户并且返回
4.查询名片
- 提示用户要搜索的姓名 1. 根据用户输入的姓名遍历列表 1. 搜索到指定的名片后,再执行后续的操作
def search_card():
"""搜索名片"""print("-" * 50)print("功能:搜索名片")
# 1. 提示要搜索的姓名find_name = input("请输入要搜索的姓名:")
# 2. 遍历字典for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")print("-" * 40)print("%s\t\t\t%s\t\t\t%s\t\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))
print("-" * 40)# TODO(小明) 针对找到的字典进行后续操作:修改/删除
breakelse:print("没有找到 %s" % find_name)
for遍历后不是通过break出来**则执行else分支 **
增加名片操作函数:修改/删除/返回主菜单
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典"""print(find_dict)
action_str = input("请选择要执行的操作 ""[1] 修改 [2] 删除 [0] 返回上级菜单")
if action == "1":print("修改")elif action == "2":print("删除")
5.查询成功后修改删除名片
删除列表里面的字典即可
- 由于找到的字典记录已经在列表中保存 - 要删除名片记录,只需要把列表中对应的字典删除即可
elif action == "2":card_list.remove(find_dict)
print("删除成功")
- 由于找到的字典记录已经在列表中保存 - 要修改名片记录,只需要把列表中对应的字典中每一个键值对的数据修改即可
if action == "1":
find_dict["name"] = input("请输入姓名:")find_dict["phone"] = input("请输入电话:")find_dict["qq"] = input("请输入QQ:")find_dict["email"] = input("请输入邮件:")
print("%s 的名片修改成功" % find_dict["name"])
如果用户在使用时,某些名片内容并不想修改,应该如何做呢?—— 既然系统提供的 input
函数不能满足需求,那么就新定义一个函数 input_card_info
对系统的 input
函数进行扩展
def input_card_info(dict_value, tip_message):
"""输入名片信息
:param dict_value: 字典原有值:param tip_message: 输入提示信息:return: 如果输入,返回输入内容,否则返回字典原有值"""# 1. 提示用户输入内容result_str = input(tip_message)
# 2. 针对用户的输入进行判断,如果用户输入了内容,直接返回结果if len(result_str) > 0:
return result_str# 3. 如果用户没有输入内容,返回 `字典中原有的值`else:
return dict_value
6.让python程序直接运行
cards_input.py
def input_card_info(dict_value, tip_message):"""输入名片信息:param dict_value: 字典中原有的值:param tip_message: 输入的提示文字:return: 如果用户输入了内容,就返回内容,否则返回字典中原有的值"""# 1. 提示用户输入内容result_str = input(tip_message)# 2. 针对用户的输入进行判断,如果用户输入了内容,直接返回结果if len(result_str) > 0:return result_str# 3. 如果用户没有输入内容,返回 `字典中原有的值`else:return dict_value
cards_main.py
#!/usr/bin/python3
import cards_toolswhile True:cards_tools.show_menu()action = input("请选择操作功能:")print("您选择的操作是:%s" % action)# 根据用户输入决定后续的操作if action in ["1", "2", "3"]:if action == "1":cards_tools.new_card()elif action == "2":cards_tools.show_all()elif action == "3":cards_tools.search_card()elif action == "0":print("欢迎再次使用【名片管理系统】")breakelse:print("输入错误,请重新输入:")
cards_tools.py
import cards_input# 所有名片记录的列表
card_list = []def show_menu():"""显示菜单"""print("*" * 50)print("欢迎使用【名片管理系统】V1.0")print("")print("1. 新建名片")print("2. 显示全部")print("3. 查询名片")print("")print("0. 退出系统")print("*" * 50)def new_card():"""新建名片"""print("-" * 50)print("功能:新建名片")# 1. 提示用户输入名片信息name = input("请输入姓名:")phone = input("请输入电话:")qq = input("请输入 QQ 号码:")email = input("请输入邮箱:")# 2. 将用户信息保存到一个字典card_dict = {"name": name,"phone": phone,"qq": qq,"email": email}# 3. 将用户字典添加到名片列表card_list.append(card_dict)# print(card_list)# 4. 提示添加成功信息print("成功添加 %s 的名片" % card_dict["name"])def show_all():"""显示全部"""print("-" * 50)print("功能:显示全部")# 1. 判断是否有名片记录if len(card_list) == 0:print("提示:没有任何名片记录")return# 2. 显示所有名片print("姓名\t\t电话\t\tQQ\t\t邮箱")print("-" * 60)for card_dict in card_list:print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))print("-" * 60)def search_card():"""搜索名片"""print("-" * 50)print("功能:搜索名片")# 1. 提示要搜索的姓名find_name = input("请输入要搜索的姓名:")# 2. 遍历字典for card_dict in card_list:if card_dict["name"] == find_name:print("姓名\t\t电话\t\tQQ\t\t邮箱")print("-" * 60)print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],card_dict["phone"],card_dict["qq"],card_dict["email"]))print("-" * 60)deal_card(card_dict)breakelse:print("没有找到 %s" % find_name)def deal_card(find_dict):"""操作搜索到的名片字典:param find_dict:名片字典"""action_str = input("请输入对名片的操作:1: 修改/ 2: 删除/ 0: 返回上级菜单")if action_str == "1":find_dict["name"] = cards_input.input_card_info(find_dict["name"],"请输入姓名[回车不修改]:")find_dict["phone"] = cards_input.input_card_info(find_dict["phone"],"请输入电话[回车不修改]:")find_dict["qq"] = cards_input.input_card_info(find_dict["qq"],"请输入QQ[回车不修改]:")find_dict["email"] = cards_input.input_card_info(find_dict["email"],"请输入邮箱[回车不修改]:")print("%s 的名片修改成功!" % find_dict["name"])elif action_str == "2":card_list.remove(find_dict)print("删除名片成功!")
相关文章:

python 基础综合应用——小开发
#python 基础综合应用——小开发 综合复习 变量- 循环- 函数- 模块 开发 名片管理系统 名片管理系统介绍 名片管理系统可以理解成花名册软件,通过个人新建人的信息后可以进行查询等简单操作的程序 名片管理系统有三个作用, 1.新建名片 2.显示全部名…...

算法金 | 我最常用的两个数据可视化软件,强烈推荐
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 预警:今天文章的描述可能会让你有点别扭;如感到不适,请及时停止 在我行…...

【机器学习实战】Baseline精读笔记
比赛用到的库 numpy:提供(多维)数组操作 pandas:提供数据结构、数据分析 catboost:用于机器学习的库,特别是分类和回归任务 sklearn.model_selection:包含模型选择的多种方法,如交…...

Redis 缓存问题及解决
所有问题解决的关键就是尽少的访问数据库,或者避免太集中的访问。 一,缓存穿透(key在数据库不存在) 当数据既不在缓存中,也不在数据库中,导致请求访问缓存没数据,访问数据库也没数据,…...

RISC-V的历史与设计理念
指令集是什么? 如果把软件比作螺丝钉,硬件比作螺母,那么指令集架构就是螺丝钉与螺母的蓝图。我们需要根据蓝图设计可以匹配的螺丝钉与螺母。——包云岗老师 RISC-V的起源 以往比较流行的指令集:ARM,MIPS,X…...

山西车间应用LP-LP-SCADA系统的好处有哪些
关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 LP-SCADA(监控控制与数据采集)系统是工业控制系统的一种,主要用于实时监控、控制和管理工业生产过程。 在车间应用LP-SCADA系统…...

setjmp和longjmp函数使用
这里用最简单直接的描述:这两组函数是用于实现类似vscode全局的标签跳转功能,setjmp负责埋下标签,longjmp负责标签跳转。 #include <stdio.h> #include <stdlib.h> #include <setjmp.h>jmp_buf envbuf1; jmp_buf envbuf2;…...

vue-org-tree搜索到对应项高亮展开
效果图: 代码: <template><div class"AllTree"><el-form :inline"true" :model"formInline" class"demo-form-inline"><el-form-item><el-input v-model"formInline.user&quo…...

FullCalendar日历组件集成实战(17)
背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件࿰…...

【图像分割】mask2former:通用的图像分割模型详解
最近看到几个项目都用mask2former做图像分割,虽然是1年前的论文,但是其attention的设计还是很有借鉴意义,同时,mask2former参考了detr的query设计,实现了语义和实例分割任务的统一。 1.背景 1.1 detr简介 detr算是第…...

【不锈钢酸退作业区退火炉用高温辐射计快速安装】
项目名称 不锈钢酸退作业区退火炉用高温辐射计快速安装 改造实施项目简介项目提出前状况:不锈钢生产过程中,各种型号的不锈钢带钢在退火工艺中对带钢温度的准确性要求很高,带钢温度的检测直接影响带钢的产品质量,不锈钢带钢温度测量依靠的是高温辐射计,其测量的准确性、稳…...

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
第29天,贪心part03,快过半了(ง •_•)ง💪,编程语言:C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解:代码随想录加油站 视频讲解:手撕加油站…...

Understanding Zero Knowledge Proofs (ZKP)
Bilingual Tutorial: Understanding Zero Knowledge Proofs (ZKP) 双语教程:理解零知识证明(ZKP) Introduction 介绍 English: Zero Knowledge Proofs (ZKP) are a fascinating concept in cryptography where one party (the prover) can…...

微信小程序 DOM 问题
DOM 渲染问题 问题 Dom limit exceeded, please check if theres any mistake youve made.测试页面 1 <template><scroll-view scroll"screen" style"width: 100%;height: 100vh;" :scroll-y"true" :scroll-with-animation"tru…...

可视化作品集(03):旅游景区的应用,美爆啦。
景区可视化通常指的是利用现代科技手段,如地图、虚拟现实(VR)、增强现实(AR)、无人机航拍等技术,将景区的地理信息、景点分布、交通路线、游客服务设施等内容以可视化的方式呈现给游客或者管理者࿰…...

嵌入式实时操作系统:Intewell操作系统与VxWorks操作系统有啥区别
Intewell操作系统和VxWorks操作系统都是工业领域常用的操作系统,它们各有特点和优势。以下是它们之间的一些主要区别: 架构差异: Intewell操作系统采用微内核架构,这使得它具有高实时性、高安全性和强扩展性的特点。微内核架构…...

PCDN技术如何提高内容分发效率?(壹)
PCDN技术提高内容分发效率的操作主要体现在以下几个方面: 利用P2P技术:PCDN以P2P技术为基础,通过挖掘利用边缘网络的海量碎片化闲置资源,实现内容的分发。这种方式可以有效减轻中心服务器的压力,降低内容传输的延迟&a…...

Java 中Json中既有对象又有数组的参数 如何转化成对象
1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象 在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对…...

什么是数据挖掘(python)
文章目录 1.什么是数据挖掘2.为什么要做数据挖掘?3数据挖掘有什么用处?3.1分类问题3.2聚类问题3.3回归问题3.4关联问题 4.数据挖掘怎么做?4.1业务理解(Business Understanding)4.2数据理解(Data Understanding&#x…...

【Tomcat】Linux下安装帆软(fineReport)服务器 Tomcat
需求:帆软(fineReport)数据集上传至服务器 工具:XSHELL XFTP 帮助文档 一. 安装帆软服务器Tomcat 提供 Linux X86 和 Linux ARM 两种类型的部署包 ,所以在下载部署钱需要确认系统架构不支持在 32 位操作系统上安装 查…...

C++ | Leetcode C++题解之第213题打家劫舍II
题目: 题解: class Solution { public:int robRange(vector<int>& nums, int start, int end) {int first nums[start], second max(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second max(fi…...

windows系统中快速删除node_modules文件
npx命令方式 npx rimraf node_modules 项目中设置 "scripts": {# 安装依赖"i": "pnpm install",# 检测可更新依赖"npm:check": "npx npm-check-updates",# 删除 node_modules"clean": "npx rimraf node_m…...

Spring MVC数据绑定和响应——页面跳转(一)返回值为void类型的页面跳转
一、返回值为void类型的页面跳转到默认页面 当Spring MVC方法的返回值为void类型,方法执行后会跳转到默认的页面。默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成,拼接格式为“前缀方法映射路径后缀”。如果Spring MVC的配置文件中没有配…...

CSS动画keyframes简单样例
一、代码部分 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href…...

LabVIEW风机跑合监控系统
开发了一种基于LabVIEW的风机跑合监控系统,提高风机测试的效率和安全性。系统通过自动控制风机的启停、实时监控电流和功率数据,并具有过流保护功能,有效减少了人工操作和安全隐患,提升了工业设备测试的自动化和智能化水平。 项目…...

sql语句练习注意点
1、时间可以进行排序,也可以用聚合函数对时间求最大值max(时间) 例如下面的例子:取最晚入职的人,那就是将入职时间倒序排序,然后limit 1 表: 场景:查找最晚入职员工的所有信息 se…...

如视“VR+AI”实力闪耀2024世界人工智能大会
7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(以下简称为“WAIC 2024”)在上海盛大开幕,本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办,围绕“以共商促共享 以善治促善智”主题…...

华为云交付模式和技术支持
华为云交付模式概览 用户由于自身或者企业属性的原因,对于使用云服务的要求也会有所不同。因此,华为云针对于不同用户的不同要求,提供了以下三种交付模式供用户选择。 公有云模式 公有云的核心属性是共享资源服务华为公有云为个人和企业用户…...

RK3568平台(opencv篇)ubuntu18.04上安装opencv环境
一.什么是 OpenCV-Python OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。 Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是 因为它的简单性和代码可读性。它使程序员能够用更少的代码行…...

R-CNN:深度学习在目标检测中的革命
R-CNN:深度学习在目标检测中的革命 目标检测是计算机视觉领域的一个核心问题,而R-CNN(Regions with Convolutional Neural Networks)算法是这一领域的一个重要里程碑。R-CNN及其后续的多种变体,如Fast R-CNN和Faster …...