加强练习 模块的基本使⽤ 学⽣管理系统 01.模块 模块是 Python 程序架构的⼀个核⼼概念 模块 就好⽐是 ⼯具包,要想使⽤这个⼯具包中的⼯具,就需要 导⼊import 这个模块每⼀个以扩展名 py 结尾的 Python 源代码⽂件都是⼀个 模块 在模块中定义的 全局变量 、 函数 都是模块能够提供给外界直接使⽤的⼯具 1.1第⼀个模块体验 步骤 新建 hm_10_分隔线模块.py 复制 hm_09_打印多条分隔线.py 中的内容,最后⼀⾏ print 代码除外 增加⼀个字符串变量 name = "⿊⻢程序员" 新建 hm_10_体验模块.py ⽂件,并且编写以下代码: import hm_10_分隔线模块 hm_10_分隔线模块.print_line("-", 80) print(hm_10_分隔线模块.name) 体验⼩结 可以 在⼀个 Python ⽂件 中 定义 变量 或者 函数 然后在 另外⼀个⽂件中 使⽤ import 导⼊这个模块 导⼊之后,就可以使⽤ 模块名.变量 / 模块名.函数 的⽅式,使⽤这个模块中定义的变量或者函数 模块可以让 曾经编写过的代码 ⽅便的被 复⽤! 1.2模块名也是⼀个标识符 标示符可以由 字⺟、下划线 和 数字 组成 不能以数字开头 不能与关键字重名 注意:如果在给 Python ⽂件起名时,以数字开头 是⽆法在 PyCharm 中通过导⼊这个模块的 、 02.综合应⽤—— 名⽚管理系统 系统需求 程序启动,显示名⽚管理系统欢迎界⾯,并显示功能菜单 ************************************************** 欢迎使⽤【名⽚管理系统】V1.0 1.新建名⽚ 2.显示全部 3.查询名⽚ 0. 退出系统 ************************************************** ⽤户⽤数字选择不同的功能 根据功能选择,执⾏不同的功能 ⽤户名⽚需要记录⽤户的 姓名、电话、QQ、邮件 如果查询到指定的名⽚,⽤户可以选择 修改 或者 删除 名⽚ 步骤 1.框架搭建 2.新增名⽚ 3.显示所有名⽚ 4.查询名⽚ 5.查询成功后修改、删除名⽚ 6.让 Python 程序能够直接运⾏ 2.1框架搭建 ⽬标 搭建名⽚管理系统 框架结构 1.准备⽂件,确定⽂件名,保证能够 在需要的位置 编写代码 2.编写 主运⾏循环,实现基本的 ⽤户输⼊和判断 2.2⽂件准备 1.新建 cards_main.py 保存 主程序功能代码程序的⼊⼝ 每⼀次启动名⽚管理系统都通过 main 这个⽂件启动 2.新建 cards_tools.py 保存 所有名⽚功能函数 将对名⽚的 新增、查询、修改、删除 等功能封装在不同的函数中 2.3编写主运⾏循环 在 cards_main 中添加⼀个 ⽆限循环 while True: # TODO(⼩明) 显示系统菜单 action = input("请选择操作功能:") print("您选择的操作是:%s" % action) # 根据⽤户输⼊决定后续的操作 if action in ["1", "2", "3"]: pass elif action == "0": print("欢迎再次使⽤【名⽚管理系统】") break else: print("输⼊错误,请重新输⼊") 字符串判断 if action in ["1", "2", "3"]: if action == "1" or action == "2" or action == "3": 1.使⽤ in 针对 列表 判断,避免使⽤ or 拼接复杂的逻辑条件 2.没有使⽤ int 转换⽤户输⼊,可以避免 ⼀旦⽤户输⼊的不是数字,导致程序运⾏出错 pass pass 就是⼀个空语句,不做任何事情,⼀般⽤做占位语句是为了保持程序结构的完整性 ⽆限循环 在开发软件时,如果 不希望程序执⾏后 ⽴即退出可以在程序中增加⼀个 ⽆限循环 由⽤户来决定 退出程序的时机 TODO 注释 在 # 后跟上 TODO ,⽤于标记需要去做的⼯作 # TODO(作者/邮件) 显示系统菜单 2.4在 cards_tools 中增加四个新函数 def show_menu(): """显示菜单 """ pass def new_card(): """新建名⽚ """ print("-" * 50) print("功能:新建名⽚") def show_all(): """显示全部 """ print("-" * 50) print("功能:显示全部") def search_card(): """搜索名⽚ """ print("-" * 50) print("功能:搜索名⽚") 2.5导⼊模块 在 cards_main.py 中使⽤ import 导⼊ cards_tools 模块 import cards_tools 修改 while 循环的代码如下: 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_main 中的所有代码全部开发完毕! 2.6完成 show_menu 函数 def show_menu(): """显示菜单 """ print("*" * 50) print("欢迎使⽤【菜单管理系统】V1.0") print("") print("1. 新建名⽚") print("2. 显示全部") print("3. 查询名⽚") print("") print("0. 退出系统") print("*" * 50) 2.7保存名⽚数据的结构 程序就是⽤来处理数据的,⽽变量就是⽤来存储数据的 使⽤ 字典 记录 每⼀张名⽚ 的详细信息使⽤ 列表 统⼀记录所有的 名⽚字典 定义名⽚列表变量 在 cards_tools ⽂件的顶部增加⼀个 列表变量 # 所有名⽚记录的列表 card_list = [] 注意 所有名⽚相关操作,都需要使⽤这个列表,所以应该 定义在程序的顶部程序刚运⾏时,没有数据,所以是 空列表 03.新增名⽚ 3.1功能分析 1.提示⽤户依次输⼊名⽚信息 2.将名⽚信息保存到⼀个字典 3.将字典添加到名⽚列表 4.提示名⽚添加完成 3.2实现 new_card ⽅法 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"]) 技巧:在 PyCharm 中,可以使⽤ SHIFT + F6 统⼀修改变量名 04.显示所有名⽚ 4.1功能分析 循环遍历名⽚列表,顺序显示每⼀个字典的信息 4.2基础代码实现 def show_all(): """显示全部 """ print("-" * 50) print("功能:显示全部") for card_dict in card_list: print(card_dict) 显示效果不好! 4.3增加标题和使⽤\t 显示 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"])) 4.4增加没有名⽚记录判断 def show_all(): """显示全部 """ print("-" * 50) print("功能:显示全部") # 1. 判断是否有名⽚记录 if len(card_list) == 0: print("提示:没有任何名⽚记录") return 注意 在函数中使⽤ return 表示返回 如果在 return 后没有跟任何内容,只是表示该函数执⾏到此就不再执⾏后续的代码 05.查询名⽚ 5.1功能分析 1.提示⽤户要搜索的姓名 2.根据⽤户输⼊的姓名遍历列表 3.搜索到指定的名⽚后,再执⾏后续的操作 5.2代码实现 查询功能实现 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) 增加名⽚操作函数:修改/删除/返回主菜单 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("删除") 06.修改和删除 6.1查询成功后删除名⽚ 由于找到的字典记录已经在列表中保存 要删除名⽚记录,只需要把列表中对应的字典删除即可 elif action == "2": card_list.remove(find_dict) print("删除成功") 6.2修改名⽚ 由于找到的字典记录已经在列表中保存 要修改名⽚记录,只需要把列表中对应的字典中每⼀个键值对的数据修改即可 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"])
|