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("输入错误,请重新输入")
​

在这里需要注意的是

  1. 使用 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. 根据用户输入的姓名遍历列表 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("删除名片成功!")

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

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

相关文章

【设计模式】装饰者模式里Java实现

插: AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈,越努力越幸运,大家…

【VIM的使用】

Vim 是一个非常强大的文本编辑器,尤其在 Linux 环境下被广泛使用。它基于 vi 编辑器开发而来,增加了许多功能和改进。下面是一个简化的 Vim 教程,帮助你快速上手: 启动 Vim 要启动 Vim,只需在终端中输入 vim [filen…

Leetcode刷题2---两数相加 Python

目录 题目及分析解法一: 迭代法解法二: 递归法解法三:反转链表法 题目及分析 (力扣序号2:两数相加) 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储…

python之音频处理(2)两个音频文件的合并

from pydub import AudioSegment# 加载两个音频文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很烦.wav")# 设置间隔(单位:…

Altium Designer专业PCB设计软件下载安装 Altium Designer安装包下载获取

在电子设计的广袤领域中,PCB设计无疑占据着重要的地位。而Altium Designer作为一款业界领先的电子设计自动化软件,其提供的先进布局工具,无疑为设计师们打开了一扇通往高效、精确设计的大门。 在PCB设计的核心环节——布局中,Alti…

初学Spring之自动装配 Bean

Bean 的作用域: 1.单例模式(Spring 默认机制) scope“singleton” 2.原型模式:每次从容器中 get 时,都会产生一个新对象 scope"prototype" 3. request、session、application,只能在 web 开…

《c语言结构体怎么函数传参》

在C语言中,结构体(struct)是一种用户自定义的数据类型,用于组合多个不同类型的数据成员。当你要将结构体作为参数传递给函数时,可以按照以下几种方式进行: 值传递(Pass by Value)&a…

【pytorch扩展】CUDA自定义pytorch算子(简单demo入手)

Pytorch作为一款优秀的AI开发平台,提供了完备的自定义算子的规范。我们用torch开发时,经常会因为现有算子的不足限制我们idea的迸发。于是,CUDA/C自定义pytorch算子是不得不磕了。 今天通过一个小实验来梳理自定义pytorch算子都需要做哪些准…

软设之类的继承与泛化,多重继承

在类中,假如父类已经写好属性或方法,子类想要实现相同的功能,不用专门写代码,直接用专门的继承语言继承就可以了。 比如说有一个动物类,有毛色和叫这两个属性和方法,又写了一个子类是猫类,猫类…

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储(Cloud Object Storage,COS)是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景,如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

Kafka搭建(单机版)

部署前提 VMware环境 : 两台centos系统 Jdk包:jdk-8u202-linux-x64.tar.gz Kafka包:kafka_2.12-3.5.0.tgz Zookeeper包:apache-zookeeper-3.7.2-bin.tar.gz 百度网盘自取: 链接: https://pan.baidu.com/s/11EWuhBoSmH3musd_3Rgodw?pwde32t 提取码: e32t Kafka搭建(…

Camtasia 2024新功能 Camtasia2024更新介绍:AI剪辑助力微课制作 Camtasia2024密钥 Camtasia2023免费升级更新

Camtasia 是一款功能强大的屏幕录制和视频编辑软件,广泛应用于教育、商业和娱乐领域。无论是创建教学视频、产品演示、教程还是营销内容,Camtasia都能提供专业的工具和功能,帮助用户制作高质量的视频内容。 Camtasia 2024 中文免费安装包百度…

暑假学习DevEco Studio第2天

学习目标: 掌握页面跳转 学习内容: 跳转页面 创建页面: 在“project”窗口。打开“entry>src>main>ets”,右击“pages”,选择“New>ArkTS File”,命名“Second”,点击回车键。 在页面的路由&#xff0…

昇思25天学习打卡营第16天|文本解码原理——以MindNLP为例

在大模型中,文本解码通常是指在自然语言处理(NLP)任务中使用的大型神经网络模型(如Transformer架构的模型)将编码后的文本数据转换回可读的原始文本的过程。这些模型在处理自然语言时,首先将输入文本&#…

【Unix/Linux】Unix/Linux如何查看系统版本

Unix和Linux查看系统版本的指令有些区别,下面分别介绍: 一.Unix查看系统版本 在Unix系统中,查看系统版本的方法可能会根据具体的Unix操作系统而有所不同。以下是一些通用的方法,适用于多种Unix系统,包括但不限于Solaris、AIX、H…

vienna整流器过零畸变原因分析

Vienna整流器是一种常见的三电平功率因数校正(PFC)整流器,广泛应用于电源和电能质量控制领域。由于其高效率、高功率密度和低谐波失真的特点,Vienna整流器在工业和电力电子应用中具有重要地位。然而,在实际应用中&…

ssh:(xshell)远程连接失败

项目场景: 提示:这里简述项目相关背景: 云服务器远程连接失败 xshell 远程连接失败 xshell (ssh客户端) ---------------------------------------------安全组----------防火墙-------黑白名单-----SSH服务 问题排查 1. 安全…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 : 我们今天UI自动化设计的时候,通常会遵循一些设计模式,例如Page Object模式。但是自己找元素再去填写有一些麻烦,所以我们可以通过拆解录制的脚本,将其中的元素提取出来…

DALL-E、Stable Diffusion 等 20+ 图像生成模型综述

二、任务场景 2.1. 无条件生成 无条件生成是指生成模型在生成图像时不受任何额外条件或约束的影响。模型从学习的数据分布中生成图像,而不需要关注输入条件。 2.2. 有条件生成 有条件生成是指生成模型在生成图像时受到额外条件或上下文的影响。这些条件可以是类别…

Vscode 保存代码,代码自动格式化

我这里使用的插件是Prettier-Code formatter:自动缩进整理代码的格式,使用方法如下: 先在vscode商店找到插件并安装:安装插件之后,随便找到一个项目文件,右键选择格式化文档:选中我们安装的插件…