东莞电子商务网站建设,seo优化一般多少钱,秦皇岛建设工程,长沙市云推网络信息有限公司上一篇#xff1a;Python 自定义包和模块随机生成6位验证码#xff08;详解版#xff09;-CSDN博客
紧接上一篇博文#xff0c;当我们熟练掌握如何自定义模块和包后#xff0c;就要开始着手运用模块和包设计自己的小程序。这里我以“英语生词本”为例#xff0c;来看我如…上一篇Python 自定义包和模块随机生成6位验证码详解版-CSDN博客
紧接上一篇博文当我们熟练掌握如何自定义模块和包后就要开始着手运用模块和包设计自己的小程序。这里我以“英语生词本”为例来看我如何一步一步实现功能。
一、简述如何自定义模块和包
①Python的包是模块的集合一个包可以放很多自定义模块与模块一样用import...或from...import...导入使用。
②模块不是一个简单的.py文件如要实现被导入调用模块一开始就要有对模块进行全局规划的意识把一些单一重复的普通函数、类、全局变量整合到一起。
二、小程序“英语生词本”设计
1、根据小程序“英语生词本”功能规划代码框架代码如下
input_info 请输入菜单序号:# 功能实现 ************************************************************************
while True:# 菜单选择choice input(input_info)input_info 请输入菜单序号:# 1.查看单词 if choice 1:pass# 2.背默单词 elif choice 2:pass# 3.新增单词 elif choice 3:pass# 4.删除单词 elif choice 4:pass# 5.修改单词 elif choice 5:pass# 0.退出 elif choice 0:break# 其他else:input_info 请重新输入菜单序号:
2、根据相应的功能逐个实现代码如下
# 功能实现 ************************************************************************
while True:init_menu() # 打印初始化菜单make_file() # 新建文件read_file_data() # 读取目标文件数据# 菜单选择choice input(input_info)input_info 请输入菜单序号:# 1.查看单词 if choice 1:input_title(查看单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 打印单词count 0 # 计数for i, j in english_dict.items():count 1print(f{count}. {i}\t\t\t{j})# 2.背默单词 elif choice 2:input_title(背默单词) # 打印标题# 判断是否为空文件if english_dict dict() or english_dict 文件不存在:print(哦豁您还没新增单词呢)continue# 选择背默模式 -----------------------------------------------------------while True:choice_mode input(f1.单词背默\t2.中文背默\t0.退出\nf{-*32}\n请选择模式序号输入:)# 1.单词背默模式 -------------------------------------------------------if choice_mode 1:input_title(单词背默) # 打印标题# 开始背默break_flag 0 # 旗帜for i, j in english_dict.items():while True:english input(f请输入{j}的\n英文翻译(退出:q 下一个:n):)# 回答正确if english.strip( ) i:print(回答正确,再接再厉)break# 退出elif english.strip( ) q or english.strip( ) Q:break_flag 1break# 下一个elif english.strip( ) n or english.strip( ) N:break# 错误elif english.strip( ) ! :print(f回答错误: {english})print(f正确答案: {i})print(- * 32) # 打印分割线# 退出两层循环if break_flag:break_flag 0breakprint(- * 32) # 打印分割线# 2.翻译背默模式 -------------------------------------------------------elif choice_mode 2:input_title(中文背默) # 打印标题# 开始背默break_flag 0 # 旗帜error_flag 0 # 旗帜for i, j in english_dict.items():while True:chinese_list [] # 输入内容容器chinese input(f请输入 {i} 的\n中文翻译(退出:q 下一个:n):)# 获取输入内容for k in chinese.split( ):if k:chinese_list.append(k)# 判断输入内容是否为空if not chinese_list:print(- * 32) # 打印分割线continue# 下一个elif chinese_list[0] in list(nN):break# 退出elif chinese_list[0] in list(qQ):break_flag 1break# 全部正确elif chinese_list j:print(全部回答正确)break# 部分正确for t in chinese_list:if t in j and t chinese_list[-1]:print(回答正确一部分)print(f完整答案: {j})break_flag 1break# 错误elif t not in j:if not error_flag:print(错误内容: , end)error_flag 1print(f{t}, end )# 退出两层循环if break_flag:break_flag 0break# 打印内容补全elif error_flag:error_flag 0print(f\n完整答案: {j})print(- * 32) # 打印分割线# 退出两层循环if break_flag:break_flag 0breakprint(- * 32) # 打印分割线# 0.退出 -------------------------------------------------------------elif choice_mode 0:breakinput_title(背默单词) # 打印标题# 3.新增单词 elif choice 3:input_title(新增单词) # 打印标题# 键盘输入单词和翻译while True:print(标准格式: instance 例子 实例)data input(请输入单词及中文翻译(退出:q):)# 获取输入内容data_list [] # 输入内容容器for i in data.split( ):if i:data_list.append(i)# 判断输入内容格式是否正确if len(data_list) 0 or (len(data_list) 1 and data_list[0] not in tuple(qQ)):print(- * 32)continue# 退出elif data_list[0] in tuple(qQ):break# 判断输入单词是否不在字典里elif data_list[0] not in english_dict.keys():english_dict[data_list[0]] data_list[1::] # 保存到字典print(f已新增成功: {data_list[0]} {english_dict[data_list[0]]})# 判断输入单词是否在字典里elif data_list[0] in english_dict.keys():print(f该单词: {data_list[0]} {english_dict[data_list[0]]}\nf已存在,无法新增: {data_list[0]} {data_list[1::]})print(-*32) # 打印分隔线# 保存到文件里from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 4.删除单词 elif choice 4:input_title(删除单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 删除单词while True:data input(请输入要删除的[单词/中文](退出:q):)# 退出if data.strip( ) q or data.strip( ) Q:break# 在字典查找与输入内容相关单词dict_keys dict_find(data)# 判断是否找到数据if len(dict_keys) 0:print(f很遗憾,未找到与 {data} 相关内容)# 单个单词直接删除elif len(dict_keys) 1:print(f原单词: {dict_keys[0]} {english_dict[dict_keys[0]]})remove input(请确认是否删除(y/n):)# 判断输入是否为空if not remove.strip( ):print(已放弃本次删除操作)# 确定删除elif remove.strip( ) y or remove.strip( ) Y:print(已成功删除单词)english_dict.pop(dict_keys[0]) # 删除# 其他else:print(已放弃本次删除操作)# 多个单词选择删除elif len(dict_keys) 1:while True:# 打印查找到的数据count 0 # 计数print(f已为您找到以下单词:)for i in dict_keys:count 1print(f{count}. {i} {english_dict[i]})choice_change input(请输入要删除的单词序号(退出:q):)# 把序号转化为字符串存入列表num_list []for i in range(1, len(dict_keys)1):num_list.append(str(i))# 退出if choice_change.strip( ) in list(qQ):break# 当输入正确序号时elif choice_change.strip( ) in num_list:print(f原单词: {dict_keys[int(choice_change)-1]} f{english_dict[dict_keys[int(choice_change)-1]]})remove input(f请确认是否要删除(y/n):)# 确定删除if remove.strip( ) y or remove.strip( ) Y:print(已成功删除单词)english_dict.pop(dict_keys[int(choice_change)-1]) # 删除# 其他else:print(已放弃本次删除操作)print(- * 32) # 打印分割线break # 跳出本次循环input_title(删除单词) # 打印标题# 更新文件数据from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 5.修改单词 elif choice 5:input_title(修改单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 修改单词while True:data input(请输入要修改的[单词/中文](退出:q):)# 退出if data.strip( ) q or data.strip( ) Q:break# 在字典查找与输入内容相关单词dict_keys dict_find(data)# 未找到数据if len(dict_keys) 0:print(f很遗憾,未找到与 {data} 相关内容)# 单个单词直接修改elif len(dict_keys) 1:print(f原单词: {dict_keys[0]} {english_dict[dict_keys[0]]})# 输入新单词data_list new_data_input(dict_keys)# 返回if not data_list:input_title(修改单词) # 打印标题continueprint(f{dict_keys[0]} {english_dict[dict_keys[0]]} f修改为 {data_list[0]} {data_list[1::]})remove input(请确认是否修改(y/n):)# 输入空字符if not remove.strip( ):print(已放弃本次修改操作)# 确定修改elif remove.strip( ) y or remove.strip( ) Y:print(已成功修改单词)english_dict.pop(dict_keys[0]) # 删除english_dict[data_list[0]] data_list[1::] # 添加# 其他else:print(已放弃本次修改操作)# 多个单词选择修改elif len(dict_keys) 1:while True:# 打印查找到的数据count 0 # 计数print(f已为您找到以下单词:)for i in dict_keys:count 1print(f{count}. {i} {english_dict[i]})choice_change input(请输入要修改的单词序号(退出:q):)# 把序号转化为字符串存入列表num_list []for i in range(1, len(dict_keys)1):num_list.append(str(i))# 退出if choice_change.strip( ) in list(qQ):break# 当输入正确序号时elif choice_change.strip( ) in num_list:print(f原单词: {dict_keys[int(choice_change)-1]} f{english_dict[dict_keys[int(choice_change)-1]]})# 输入新单词data_list new_data_input(dict_keys, dict_keys[int(choice_change)-1])# 返回if not data_list:breakremove input(f{dict_keys[int(choice_change) - 1]} f{english_dict[dict_keys[int(choice_change)-1]]} f修改为 {data_list[0]} {data_list[1::]}f\n请确认是否要修改(y/n):)# 确定修改if remove.strip( ) y or remove.strip( ) Y:print(已成功修改单词)english_dict.pop(dict_keys[int(choice_change)-1]) # 删除english_dict[data_list[0]] data_list[1::] # 添加# 其他else:print(已放弃本次修改操作)print(- * 32) # 打印分割线break # 跳出本次循环input_title(修改单词) # 打印标题# 更新文件数据from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 0.退出 elif choice 0:input_title(退出生词本, 11) # 打印标题break# 其他else:input_info 请重新输入菜单序号:
3、自定义模块和包导入实现代码交互代码如下
字典文件模块
# 用于模块导入使用通配符*
__all__ [make_dir, make_file, dict_file]****************************** 普通函数 ******************************
# 新建目录 ----------------------------------------------------------------
def make_dir(path):# 路径分割path_list for i in path.split(\\)[:-1:]:path_list i \\# 新建目录import osif not os.path.exists(path_list):os.mkdir(path_list)# 新建文件 ---------------------------------------------------------------
def make_file(path):# 判断文件是否存在import osif not os.path.exists(path):file open(filepath, modew)file.close()****************************** 功能类 ******************************
# 字典文件类
class dict_file:def __init__(self):pass# 读取文件数据 ----------------------------------------------------classmethoddef file_read(cls, dict, path, split):# 判断文件是否存在import osif not os.path.exists(path):return 文件不存在# 读取文件数据file open(filepath, moder, encodingutf-8)data_list file.readlines()file.close()# 判断文件是否为空if data_list dict:return dict# 分割获取需要的数据for i in data_list:split_list i.strip(\n).split(split)dict[split_list[0]] split_list[1::]return dict# 写入文件数据 ---------------------------------------------------classmethoddef file_write(cls, dict, path, split):make_dir(path) # 创建目录# make_file(path) # 创建文件# 数据写入文件file open(filepath, modew, encodingutf-8)for i, j in dict.items():file.write(f{i})for k in j:file.write(f{split}{k})file.write(\n)file.close()****************************** 代码测试 ******************************
# 代码测试 ****************************************************************
if __name__ __main__:print(dict_file.file_read(dict(), .\\..\\123\\456.txt, (*)))dict_file.file_write({present: [现在, 礼物]}, .\\..\\111\\222.txt, (*))
else:pass
4、所有功能整合完成代码如下
英语生词本(文件版)# 打印初始化菜单
def init_menu():print(f{*12}英语生词本{*12}\nf1.查看单词\t2.背默单词\tf3.新增单词\n4.删除单词\tf5.修改单词\t0.退出\n{-*32})# 打印标题
def input_title(str, fill12):print(f{**fill} {str} {**fill})# 创建文件
def make_file():from 小功能包 import 词典文件词典文件.make_dir(file_path) # 创建目录词典文件.make_file(file_path) # 创建文件# 读取目标文件数据
def read_file_data():from 小功能包.词典文件 import dict_fileglobal english_dictenglish_dict dict_file.file_read(dictdict(), pathfile_path, splitsplit)# 数据查找
def dict_find(find_str):# 查找与输入内容相关单词dict_keys [] # 字典键容器keyword [] # 关键字# 分离查找关键字for i in find_str.strip( ).split( ):if i:keyword.append(i)# 查找关键字for i, j in english_dict.items():only_flag 1 # 只执行一次for k in keyword:if i k or k in j:if only_flag: # 只执行一次only_flag 0dict_keys.append(i)print(- * 32) # 打印分割线return dict_keys# 新单词输入
def new_data_input(dict_keys, strNone):# 剔除单词new_keys []if str:new_keys.extend(dict_keys)new_keys.remove(str)# 新单词输入if dict_keys:while True:data_list [] # 输入内容容器new_data input(请输入新单词及中文翻译(退出:q):)# 获取输入内容for i in new_data.split( ):if i:data_list.append(i)# 判断输入内容格式是否正确if len(data_list) 0 or (len(data_list) 1 and data_list[0] not in tuple(qQ)):print(标准格式: instance 例子 实例)# 退出elif data_list[0] in tuple(qQ):return []# 判断单词是否存在elif data_list[0] in english_dict.keys() and data_list[0] not in dict_keys:print(f该单词: {data_list[0]} {english_dict[data_list[0]]}\nf已存在,无法命名为: {data_list[0]})elif data_list[0] in new_keys and str:print(f该单词: {data_list[0]} {english_dict[data_list[0]]}\nf已存在,无法命名为: {data_list[0]})else:breakprint(- * 32) # 打印分割线return data_list# 全局变量
english_dict dict() # 用于暂存英语生词字典
file_path .\\..\\English\\data.txt # 文件保存路径
split (*) # 数据分割符号
input_info 请输入菜单序号:# 功能实现 ************************************************************************
while True:init_menu() # 打印初始化菜单make_file() # 新建文件read_file_data() # 读取目标文件数据# 菜单选择choice input(input_info)input_info 请输入菜单序号:# 1.查看单词 if choice 1:input_title(查看单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 打印单词count 0 # 计数for i, j in english_dict.items():count 1print(f{count}. {i}\t\t\t{j})# 2.背默单词 elif choice 2:input_title(背默单词) # 打印标题# 判断是否为空文件if english_dict dict() or english_dict 文件不存在:print(哦豁您还没新增单词呢)continue# 选择背默模式 -----------------------------------------------------------while True:choice_mode input(f1.单词背默\t2.中文背默\t0.退出\nf{-*32}\n请选择模式序号输入:)# 1.单词背默模式 -------------------------------------------------------if choice_mode 1:input_title(单词背默) # 打印标题# 开始背默break_flag 0 # 旗帜for i, j in english_dict.items():while True:english input(f请输入{j}的\n英文翻译(退出:q 下一个:n):)# 回答正确if english.strip( ) i:print(回答正确,再接再厉)break# 退出elif english.strip( ) q or english.strip( ) Q:break_flag 1break# 下一个elif english.strip( ) n or english.strip( ) N:break# 错误elif english.strip( ) ! :print(f回答错误: {english})print(f正确答案: {i})print(- * 32) # 打印分割线# 退出两层循环if break_flag:break_flag 0breakprint(- * 32) # 打印分割线# 2.翻译背默模式 -------------------------------------------------------elif choice_mode 2:input_title(中文背默) # 打印标题# 开始背默break_flag 0 # 旗帜error_flag 0 # 旗帜for i, j in english_dict.items():while True:chinese_list [] # 输入内容容器chinese input(f请输入 {i} 的\n中文翻译(退出:q 下一个:n):)# 获取输入内容for k in chinese.split( ):if k:chinese_list.append(k)# 判断输入内容是否为空if not chinese_list:print(- * 32) # 打印分割线continue# 下一个elif chinese_list[0] in list(nN):break# 退出elif chinese_list[0] in list(qQ):break_flag 1break# 全部正确elif chinese_list j:print(全部回答正确)break# 部分正确for t in chinese_list:if t in j and t chinese_list[-1]:print(回答正确一部分)print(f完整答案: {j})break_flag 1break# 错误elif t not in j:if not error_flag:print(错误内容: , end)error_flag 1print(f{t}, end )# 退出两层循环if break_flag:break_flag 0break# 打印内容补全elif error_flag:error_flag 0print(f\n完整答案: {j})print(- * 32) # 打印分割线# 退出两层循环if break_flag:break_flag 0breakprint(- * 32) # 打印分割线# 0.退出 -------------------------------------------------------------elif choice_mode 0:breakinput_title(背默单词) # 打印标题# 3.新增单词 elif choice 3:input_title(新增单词) # 打印标题# 键盘输入单词和翻译while True:print(标准格式: instance 例子 实例)data input(请输入单词及中文翻译(退出:q):)# 获取输入内容data_list [] # 输入内容容器for i in data.split( ):if i:data_list.append(i)# 判断输入内容格式是否正确if len(data_list) 0 or (len(data_list) 1 and data_list[0] not in tuple(qQ)):print(- * 32)continue# 退出elif data_list[0] in tuple(qQ):break# 判断输入单词是否不在字典里elif data_list[0] not in english_dict.keys():english_dict[data_list[0]] data_list[1::] # 保存到字典print(f已新增成功: {data_list[0]} {english_dict[data_list[0]]})# 判断输入单词是否在字典里elif data_list[0] in english_dict.keys():print(f该单词: {data_list[0]} {english_dict[data_list[0]]}\nf已存在,无法新增: {data_list[0]} {data_list[1::]})print(-*32) # 打印分隔线# 保存到文件里from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 4.删除单词 elif choice 4:input_title(删除单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 删除单词while True:data input(请输入要删除的[单词/中文](退出:q):)# 退出if data.strip( ) q or data.strip( ) Q:break# 在字典查找与输入内容相关单词dict_keys dict_find(data)# 判断是否找到数据if len(dict_keys) 0:print(f很遗憾,未找到与 {data} 相关内容)# 单个单词直接删除elif len(dict_keys) 1:print(f原单词: {dict_keys[0]} {english_dict[dict_keys[0]]})remove input(请确认是否删除(y/n):)# 判断输入是否为空if not remove.strip( ):print(已放弃本次删除操作)# 确定删除elif remove.strip( ) y or remove.strip( ) Y:print(已成功删除单词)english_dict.pop(dict_keys[0]) # 删除# 其他else:print(已放弃本次删除操作)# 多个单词选择删除elif len(dict_keys) 1:while True:# 打印查找到的数据count 0 # 计数print(f已为您找到以下单词:)for i in dict_keys:count 1print(f{count}. {i} {english_dict[i]})choice_change input(请输入要删除的单词序号(退出:q):)# 把序号转化为字符串存入列表num_list []for i in range(1, len(dict_keys)1):num_list.append(str(i))# 退出if choice_change.strip( ) in list(qQ):break# 当输入正确序号时elif choice_change.strip( ) in num_list:print(f原单词: {dict_keys[int(choice_change)-1]} f{english_dict[dict_keys[int(choice_change)-1]]})remove input(f请确认是否要删除(y/n):)# 确定删除if remove.strip( ) y or remove.strip( ) Y:print(已成功删除单词)english_dict.pop(dict_keys[int(choice_change)-1]) # 删除# 其他else:print(已放弃本次删除操作)print(- * 32) # 打印分割线break # 跳出本次循环input_title(删除单词) # 打印标题# 更新文件数据from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 5.修改单词 elif choice 5:input_title(修改单词) # 打印标题# 判断是否为空文件if english_dict dict():print(哦豁您还没新增单词呢)continue# 修改单词while True:data input(请输入要修改的[单词/中文](退出:q):)# 退出if data.strip( ) q or data.strip( ) Q:break# 在字典查找与输入内容相关单词dict_keys dict_find(data)# 未找到数据if len(dict_keys) 0:print(f很遗憾,未找到与 {data} 相关内容)# 单个单词直接修改elif len(dict_keys) 1:print(f原单词: {dict_keys[0]} {english_dict[dict_keys[0]]})# 输入新单词data_list new_data_input(dict_keys)# 返回if not data_list:input_title(修改单词) # 打印标题continueprint(f{dict_keys[0]} {english_dict[dict_keys[0]]} f修改为 {data_list[0]} {data_list[1::]})remove input(请确认是否修改(y/n):)# 输入空字符if not remove.strip( ):print(已放弃本次修改操作)# 确定修改elif remove.strip( ) y or remove.strip( ) Y:print(已成功修改单词)english_dict.pop(dict_keys[0]) # 删除english_dict[data_list[0]] data_list[1::] # 添加# 其他else:print(已放弃本次修改操作)# 多个单词选择修改elif len(dict_keys) 1:while True:# 打印查找到的数据count 0 # 计数print(f已为您找到以下单词:)for i in dict_keys:count 1print(f{count}. {i} {english_dict[i]})choice_change input(请输入要修改的单词序号(退出:q):)# 把序号转化为字符串存入列表num_list []for i in range(1, len(dict_keys)1):num_list.append(str(i))# 退出if choice_change.strip( ) in list(qQ):break# 当输入正确序号时elif choice_change.strip( ) in num_list:print(f原单词: {dict_keys[int(choice_change)-1]} f{english_dict[dict_keys[int(choice_change)-1]]})# 输入新单词data_list new_data_input(dict_keys, dict_keys[int(choice_change)-1])# 返回if not data_list:breakremove input(f{dict_keys[int(choice_change) - 1]} f{english_dict[dict_keys[int(choice_change)-1]]} f修改为 {data_list[0]} {data_list[1::]}f\n请确认是否要修改(y/n):)# 确定修改if remove.strip( ) y or remove.strip( ) Y:print(已成功修改单词)english_dict.pop(dict_keys[int(choice_change)-1]) # 删除english_dict[data_list[0]] data_list[1::] # 添加# 其他else:print(已放弃本次修改操作)print(- * 32) # 打印分割线break # 跳出本次循环input_title(修改单词) # 打印标题# 更新文件数据from 小功能包.词典文件 import dict_filedict_file.file_write(english_dict, file_path, split)# 0.退出 elif choice 0:input_title(退出生词本, 11) # 打印标题break# 其他else:input_info 请重新输入菜单序号:
运行结果
英语生词本
1.查看单词 2.背默单词 3.新增单词
4.删除单词 5.修改单词 0.退出
--------------------------------
请输入菜单序号:1
************ 查看单词 ************
哦豁您还没新增单词呢
英语生词本
1.查看单词 2.背默单词 3.新增单词
4.删除单词 5.修改单词 0.退出
--------------------------------
请输入菜单序号:3
************ 新增单词 ************
标准格式: instance 例子 实例
请输入单词及中文翻译(退出:q):title 题目 标题
已新增成功: title [题目, 标题]
--------------------------------
标准格式: instance 例子 实例
请输入单词及中文翻译(退出:q):turtle 海龟
已新增成功: turtle [海龟]
--------------------------------
标准格式: instance 例子 实例
请输入单词及中文翻译(退出:q):q
英语生词本
1.查看单词 2.背默单词 3.新增单词
4.删除单词 5.修改单词 0.退出
--------------------------------
请输入菜单序号:1
************ 查看单词 ************
1. title [题目, 标题]
2. turtle [海龟]
作者周华
创作日期2023/10/14