Python 自定义模块和包设计英语生词本(文件版)

上一篇: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(f'1.单词背默\t2.中文背默\t0.退出\n'f'{"-"*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]]}\n'f'已存在,无法新增: {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(file=path, mode='w')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(file=path, mode='r', encoding='utf-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(file=path, mode='w', encoding='utf-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}\n'f'1.查看单词\t2.背默单词\t'f'3.新增单词\n4.删除单词\t'f'5.修改单词\t0.退出\n{"-"*32}')# 打印标题  =========================================================================
def input_title(str, fill=12):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(dict=dict(), path=file_path, split=split)# 数据查找  ========================================================================
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, str=None):# 剔除单词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]]}\n'f'已存在,无法命名为: {data_list[0]}')elif data_list[0] in new_keys and str:print(f'该单词: {data_list[0]}  {english_dict[data_list[0]]}\n'f'已存在,无法命名为: {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(f'1.单词背默\t2.中文背默\t0.退出\n'f'{"-"*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]]}\n'f'已存在,无法新增: {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

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

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

相关文章

vue 请求代理 proxy

目录 为什么需要配置代理 什么是同源策略 如何配置代理 请求代理的原理 举例说明 为什么需要配置代理 因为浏览器的同源策略,当向和本地 devServer 服务器不同源的地址发送请求, 会违反浏览器的同源策略,导致发送失败,所以需…

极简c++(4)类的静态成员

静态数据成员 ::是作用域操作符&#xff01; #include<iostream> using namespace std;class Point{private:int x,y;public:point(int x 0,int y 0):x(x),y(y){}~point();int getX(){return x;}int getY(){return x;} }假设需要统计点的个数&#xff0c;考虑添加一个…

【MySQL】聚合查询与分组查询

我们先重建一个test库&#xff0c;在test库里新建一个people表&#xff08;包含序列号&#xff0c;姓名&#xff0c;工资&#xff09;&#xff0c;再往表该表里新增六条数据&#xff1a; mysql> drop database if exists test; Query OK, 1 row affected (0.07 sec)mysql>…

【mfc/VS2022】计图实验:绘图工具设计知识笔记

绘制曲线&#xff08;贝塞尔曲线&#xff09;&#xff1a; 转自&#xff1a;CDC 类 | Microsoft Learn 绘制一条或多条贝塞尔曲线。 BOOL PolyBezier(const POINT* lpPoints,int nCount);参数 lpPoints 指向包含曲线端点和控制点的 POINT 数据结构数组。 nCount 指定 lpPo…

git 如何删除本地分支且并没有完全合并到目标分支中

git 如何删除本地分支且并没有完全合并到目标分支中 确保你当前所在的分支不是dev_welc_share_permission分支&#xff0c;如果是的话&#xff0c;可以执行以下命令切换到其他分支&#xff08;比如master&#xff09;&#xff1a; git checkout master使用以下命令删除dev_s…

使用kaliber与imu_utils进行IMU、相机+IMU联合标定

目录 1 标定工具编译 1.1 IMU标定工具 imu_utils 1.2 相机标定工具 kaliber 2 标定数据录制 3 开始标定 3.1 IMU标定 3.2 相机标定 3.3 相机IMU联合标定 4 将参数填入ORBSLAM的文件中 1 标定工具编译 1.1 IMU标定工具 imu_utils 标定IMU我们使用imu_utils软件进行标定…

router和route的区别?

router&#xff08;路由器&#xff09;和route&#xff08;路由&#xff09;是计算机网络中的两个概念&#xff0c;它们有不同的含义和作用。 Router&#xff08;路由器&#xff09;&#xff1a; 路由器是一种网络设备&#xff0c;用于连接多个网络&#xff0c;并在网络之间转发…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux CentOS8安装gitlab_ce步骤

1 下载安装包 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm/download.rpm2 安装gitlab yum install policycoreutils-python-utilsrpm -Uvh gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm3 更新配…

在conda创建的虚拟环境中安装jupyter以及使用

1. 进入你的虚拟环境 conda activate conda_env_name 2. 安装jupyter notebook conda install -y jupyter 3. 启动jupyter jupyter notebook 4. 将conda环境添加到jupyter的内核中 conda install ipykernel python -m ipykernel install --name conda_env_namepython -m…

Stm32_标准库_12_串口_发送数据

波特率&#xff1a;约定的传输速率&#xff0c;1000bps,1s发1000位 引脚 结构 数据帧的传输特点 代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h"GPIO_InitTypeDef GPIO_InitStruct; USART…

2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人…

【算法-动态规划】两个字符串的删除操作-力扣 583

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程&#xff0c;加载maven的时候报错&#xff1a; 这个问题以前遇到过&#xff0c;这是因为 mysql-connector-j 没有带版本号的原因&#xff0c;但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗&#xff0c;为什么还会报错&…

Redis 集群 Redis 事务 Redis 流水线 Redis 发布订阅 Redis Lua脚本操作

Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 Redis 集群linux安装redis主从配置查看当前实例主从信息 Redis Sentinelsentinel Redis Cluster Redis 事务Redis 流水线Redis 发布订阅Redis Lua脚本操作 Redis 集群 linux安装redis 下载安装包&#…

VSCODE配置C和C++

VSCode 运行 C/C 怎么配置&#xff1f; - 忆梦怀思的回答 - 知乎 https://www.zhihu.com/question/577315418/answer/3232537840 这个很好用&#xff0c;简单明白。 其中最后我的只配置了tasks.json就成功了。

五子棋(C语言实现)

目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版&#xff1a; game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了&#xff0c;大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…

C++算法:最短回文串

题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s “aacecaaa” 输出&#xff1a;“aaacecaaa” 示例 2&#xff1a; 输入&#xff1a;s “abcd” 输…

hive数据的导入导出

目录 分区表&#xff1a; 分桶表&#xff1a; 数据导出 普通表&#xff1a; load data【 local 】 inpath 数据文件路径 [overwrite] into table 表名 ; --overwrite into table 覆盖添加 -- intotable 追加 从linux本地导入数据到表中 load data local inpath /home…

Django框架集成Celery异步-【2】:django集成celery,拿来即用,可用操作django的orm等功能

一、项目结构和依赖 study_celery | --user |-- models.py |--views.py |--urls.py |--celery_task |--__init__.py |--async_task.py |-- celery.py | --check_task.py | --config.py | --scheduler_task.py | --study_celery | --settings.py | --manage.py 依赖&#xff1a…