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"]:
        pass
    elif action == "0":
        print("欢迎再次使用【名片管理系统】")
​
        break
    else:
        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("欢迎再次使用【名片管理系统】")
​
        break
    else:
        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(小明) 针对找到的字典进行后续操作:修改/删除
​
            break
    else:
        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_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("欢迎再次使用【名片管理系统】")
 
        break
    else:
        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)
 
            break
    else:
        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.mfbz.cn/a/772332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单例模式详解:概念与实用技巧

目录 单例模式单例模式结构单例模式适用场景单例模式优缺点练手题目题目描述输入描述输出描述输入示例输出示例提示信息题解 单例模式 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 只有一个实例的…

【深入理解Java虚拟机】判断垃圾-引用计数法及其缺陷

什么是引用计数法 引用计数法用来判断对象是否存活 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值加一;当引用失效时,计数器的值就减一,任何时刻计数器为0的对象是不可能在被使用的。(存…

c++类模板及应用

文章目录 为什么要有函数模板一般实现举例类模板举例 继承中类模板的使用特殊情况 友元函数模板类和静态成员类模板实践 为什么要有函数模板 项目需求: 实现多个函数用来返回两个数的最大值,要求能支持char类型、int类型、double 一般实现举例 类模板举例 继承中类…

2.2 ROS2话题通信

场景 话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,比如如下场景: 机器人在执行导航功能&#…

肺炎-X光-图像分类数据集

肺炎-X光-图像分类数据集 数据集: 链接:https://pan.baidu.com/s/1bt6tf-jHqgufKqPmCFHbrQ?pwdaj54 提取码:aj54 数据集信息介绍: 文件夹 健康 中的图片数量: 1575 文件夹 新冠肺炎 中的图片数量: 1728 文件夹 普通肺炎 中的…

AI:开发者的超级助手,而非取代者

AI:开发者的超级助手,而非取代者 引言 在这个日新月异的科技时代,人工智能(AI)已悄然渗透到我们生活的方方面面,尤其是在软件开发领域,它正以一种前所未有的方式改变着我们的工作方式。作为一名…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型,整体来说,Redis 是一个键值对结构的,…

《数据结构与算法基础 by王卓老师》学习笔记——2.5线性表的链式表示与实现1

1.链式表示 2.链表举例 3.链式存储的相关术语 4.三个讨论题

【软件测试】之自动化测试

🏀🏀🏀来都来了,不妨点个关注! 🎧🎧🎧博客主页:欢迎各位大佬! 文章目录 什么是自动化测试Selenium介绍什么是SeleniumSelenium的特点工作原理 SeleniumJava环境搭建下载…

数学建模------Matlab数据可视化

目录 1.plot函数 (1)函数介绍 (2)参数介绍 (3)图形美化 (4)背景更改 (5)多组绘制 (6)图形叠加 (7)添加…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 英文单词联想(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…

Flume集群部署(手把手部署图文详细版)

前景概要: Kafka消息订阅系统在大数据业务中有着重要运用,尤其在实时业务中,kafka是必不可少的组件之一。 Flume是大数据组件中重要的数据采集工具,我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中&…

大白菜U盘启动工具

大白菜如何u盘启动进winpe装系统大白菜是一款非常实用的U盘启动盘制作工具,可以帮助用户快速地将U盘制作成启动盘,从而方便地进行系统安装、维护和修复等操作。官方网站: 大白菜u盘启动盘制作工具_大白菜u盘装系统_大白菜pe_大白菜官网-首页…

机器人控制系列教程之Stewart平台简介和运动学分析

Stewart平台简介及应用场景 六自由度 Stewart 并联机器人结构简图如下图所示,主要有一个固定平台和一个移动平台以及六个可伸缩的推杆组成,通常情况下,固定平台与底座连接,移动平台在空间具有六个自由度,通过六个推杆…

设置Docker中时区不生效的问题

项目中使用docker-compose,并通过以下方式设置了时区 environment:- SET_CONTAINER_TIMEZONEtrue- CONTAINER_TIMEZONEAsia/Shanghai 但是并没有正确生效,网上有很多博客都在推荐这个做法,另外一种是使用标准环境标量 -TZAsia/Shangehai …

大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点: 高并发、大流量:这些系统必须能够处理成千上万甚至数百万的并发用户请求,以及持续…

Entity Framework EF Migration 迁移

针对Code First来说关注的只有实体类。当需求变更时只需要添加新的实体类或者在实体类中添加、删除、修改属性即可。但是修改完成之后要如何将修改同步到数据库中? migration 机制就出现了 ●启用Migrations   ●通过Add-Migration添加Migration   ●Update-D…

Feign 原理流程图练习-01

目录 作业: 老师给的参考流程图 要求 解答 知识扩展 Feign基础原理 接口定义 代理对象生成 请求调用 请求发送 响应处理 容错与熔断 总结 作业: 老师给的参考流程图 pdf版本 【金山文档 | WPS云文档】 Feign https://kdocs.cn/l/ctbagIyxN348 ​ 要求 结合上面…

Kafka集群部署(手把手部署图文详细版)

1.1.1 部署zookpeer 在node02下载并解压zookeeper软件包 cd /usr/local wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 或者:scp cat192.168.28.100:/home/cat/zookeeper-3.4.6.tar.gz /tmp(注意目录&#xf…