经过之前的从码到图自学的兴趣简直爆棚,这几天又综合练习了一个名片系统1.0,界面长这样。
用各种数字来新建、显示、查询名片的一个小“应用”。整个过程妙啊!聪明啊!感叹词在心中不下数十次。今天就记录下,对应用编程的初步理解。
新知识点
1.无限循环while True:
之前一般是计数器,X +=1,这次用了无限循环,不停第让用户选择不停地操作。
2.TODO分工:
一种编码分工或者菜单提醒的小功能,可以标注谁负责某段代码,提示不要忘记(编写好后老师建议删除)
3.框架搭建+工具函数:
给名片管理系统先搭建一个架子,一个骨架,实际开放的时候,也会先打建架子,让程序简单的运营起来,通常复杂的应用程序是由多个文件组成,
这里需要main.py主程序(启动的入口,实现简单运行负责判断和输入);
而其他的py文件就是辅助,这里命名tools.py(对名片的显示、查询、显示等功能函数,让主程序进行调用)。
4.pass关键字的妙用:
如果在开发程序过程中,不希望立刻编写分支内部的代码,可以使用pass关键字,表示一个占位符,能够保证程序代码结构正确!程序运行时,pass关键字不会执行任何操作,
5.函数名整体修改:想修改的字上右键选Refactor-Rename-all
6.if的函数嵌套、函数的函数嵌套:
两个py文件相互调用,if里面镶嵌if
7.增加文档注释(函数类的说明,意于后期读懂):
这个则是行为规则习惯的。
接下来则把每个逻辑方面记录下来。重点是思维想法的走向。
先看需求,是一个什么样的内容,根据需求大框架。
一:搭建一个框架:用户输入内容提示
action_str = input("请输入你选择的操作:") print(f"您选择的操作是:{action_str}") # 1 2 3 针对名片操作,0退出系统 其他报错 if action_str in [1, 2, 3]: pass elif action_str == "0": pass else: print("您输入的不正确,请重新选择操作")
这里就运用了pass关键字,用于同行不报错。
二:搭建一个框架:无限循环使用,保证用户重复选择操作
while True: action_str = input("请输入你选择的操作:") print(f"您选择的操作是:{action_str}") # 1 2 3 针对名片操作,0退出系统 其他报错 if action_str in [1, 2, 3]: #新增名片 if action_str == "1": pass #显示全部 elif action_str == "2": pass #查询名片 elif action_str == "3": pass elif action_str == "0": print("欢迎再次使用【名片管理系统】") break else: print("您输入的不正确,请重新选择操作")
使用无限循环while True: 并且考虑出现的页面展示被pass关键字,相当于是对刚才内容的进一步完善。
三:搭建一个框架:显示欢迎界面
提示点:把pass点替换成能用的代码就行了。
此地方用了一个思维,就是如果把操作内容代码都放进if条件里面是不是又长又不利于理解,所以用函数在tools.py中开始设置函数了。
截图套红是调用的tools1内的函数(如下)
def show_menu(): """显示菜单""" print("*" * 50) print("欢迎使用【名片管理系统】1.0" ) print("" ) print("1.新增名片" ) print("2.显示全部" ) print("3.搜索名片" ) print("" ) print("0.退出系统" ) print("*" * 50)
四:数据结构的确认
也就是对如何处理系统需要实现的处理内容,增加名片,显示名片,搜索名片,以及修改名片删除名片等
要有对应不同类型的函数对应调用及编码。
card_list = []
设置一个全局变量,相当于每次都在这个列表中进行操作。
五:实现新增名片功能
def new_card(): """新增名片""" print("-" * 50) print("新增名片") #1 提示用户输入名片信息 name_str = input("请输入姓名:") phone_srt = input("请输入电话:") qq_str = input("请输入QQ:") email_str = input("请输入邮箱:") #2 使用用户输入的信息建立一个名片的字典 card_dict = {"name": name_str, "phone": phone_srt, "qq": qq_str, "email": email_str} #3 将名片字典添加到列表中 card_list.append(card_dict) print(card_list) #4 提示用户添加成功 print(f"新名片{name_str}添加成功")
六:实现显示全部功能
"""显示所有名片""" print("-" * 50) print("显示所有名片") #判断是否存在名片记录,如果没有,提示用户输入并返回 if len(card_list) == 0: print("当前没有任何的名片记录,请使用1新增名片进行添加") #可以返回一个函数结果,下方代码不会被执行,返回到调用函数的位置,不会返回任何结果 return # 打印标题 for name in ["姓名", "电话", "qq", "邮箱"]: print(name, end="\t\t\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 deal_card(find_dict): """处理查找到的名片 :param find_dict: 查找到的名片 """ print(find_dict) action_str = input("请选择要执行的操作:" "[1] 修改 [2] 删除 [0] 返回上级菜单") if action_str == "1": find_dict["name"] = input_card_info(find_dict["name"], "你要修改的姓名[回车不修改]:") find_dict["phone"] = input_card_info(find_dict["name"], "你要修改的电话[回车不修改]:") find_dict["qq"] = input_card_info(find_dict["qq"],"你要修改的qq[回车不修改]:") find_dict["email"] = input_card_info(find_dict["email"],"你要修改的邮箱[回车不修改]:") print("修改名片") elif action_str == "2": card_list.remove(find_dict) print("删除名片成功") def input_card_info(dict_valut,tip_message): """输入名片信息 :param dict_valut: 字典原有的值 :param tip_message: 输入的提示文字 :return: 如果用户输入了内容,就返回内容,否则返回原有的值 """ #1 提示用户输入内容 result_str = input(tip_message) #2 针对用户输入进行判断,如果用户输入了内容,直接返回结果, if len(result_str) > 0: return result_str #3 如果用户没有输入内容,返回字典中原有的值。 else: return dict_valut
这里面是对查询搜索功能后又增加了修改、删除、返回上一级。
思路就是把看上去繁杂的代码都打包作为函数,作为另外一个函数。
八:最终main文件内容
import cards_tools # while True: 是无限循环,只有客户主动选择退出0 才退出 while True: #示功能菜单 cards_tools.show_menu() action_srt = input("请选择希望执行的操作:") print("您选择的操作是 [%s]" % action_srt) #如果1,2,3 是针对名片的操作 if action_srt in ["1", "2", "3"]: #这个in是成员运算符,表示是否在这里面。 # 新增名片的处理 if action_srt == "1": cards_tools.new_card() # 显示全部的处理 if action_srt == "2": cards_tools.show_all() # 查询名片的处理 if action_srt == "3": cards_tools.search_card() #0 退出系统 elif action_srt == "0": print("您已退出,欢迎再次使用【名片管理系统1.0】") break #如果在开发程序是,不希望立刻编写分支内部的代码 #可以使用pass 关键字,表示一个占位符,能够保证程序的代码结构正确。 #程序运行时,pass 关键字不会执行任何的操作。 # pass #其他内容,输入错误,提示客户 else: print("您输入的不正确,请重新选择")
实现,加个鸡腿
错误点
a.在框架搭建的时候,if条件判断是否等于1/2/3时,没有代“1”“2”“3”,输出就一直有eles的内容print()。原因是单个的元素哇,不是列表判断呢。
b.函数调用来调用过去,缩行的逻辑一定要清晰。
c.跟着老师敲还是会出现很多细小的错误呢。
加油!