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


    上一篇:Python 自定义包和模块随机生成6位验证码(详解版)-CSDN博客

    紧接上一篇博文,当我们熟练掌握如何自定义模块和包后,就要开始着手运用模块和包设计自己的小程序。这里我以“英语生词本”为例,来看我如何一步一步实现功能。

    一、简述如何自定义模块和包

    ①Python的包是模块的集合,一个包可以放很多自定义模块,与模块一样用import...或from...import...导入使用。

    ②模块不是一个简单的.py文件,如要实现被导入调用模块,一开始就要有对模块进行全局规划的意识,把一些单一重复的普通函数、类、全局变量整合到一起。

    二、小程序“英语生词本”设计

    1、根据小程序“英语生词本”功能规划代码框架,代码如下:

    1. input_info = '请输入菜单序号:'
    2. # 功能实现 ************************************************************************
    3. while True:
    4. # 菜单选择
    5. choice = input(input_info)
    6. input_info = '请输入菜单序号:'
    7. # 1.查看单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    8. if choice == '1':
    9. pass
    10. # 2.背默单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    11. elif choice == '2':
    12. pass
    13. # 3.新增单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    14. elif choice == '3':
    15. pass
    16. # 4.删除单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    17. elif choice == '4':
    18. pass
    19. # 5.修改单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    20. elif choice == '5':
    21. pass
    22. # 0.退出 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    23. elif choice == '0':
    24. break
    25. # 其他
    26. else:
    27. input_info = '请重新输入菜单序号:'

    2、根据相应的功能逐个实现,代码如下:

    1. # 功能实现 ************************************************************************
    2. while True:
    3. init_menu() # 打印初始化菜单
    4. make_file() # 新建文件
    5. read_file_data() # 读取目标文件数据
    6. # 菜单选择
    7. choice = input(input_info)
    8. input_info = '请输入菜单序号:'
    9. # 1.查看单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    10. if choice == '1':
    11. input_title('查看单词') # 打印标题
    12. # 判断是否为空文件
    13. if english_dict == dict():
    14. print('哦豁!您还没新增单词呢!')
    15. continue
    16. # 打印单词
    17. count = 0 # 计数
    18. for i, j in english_dict.items():
    19. count += 1
    20. print(f'{count}. {i}\t\t\t{j}')
    21. # 2.背默单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    22. elif choice == '2':
    23. input_title('背默单词') # 打印标题
    24. # 判断是否为空文件
    25. if english_dict == dict() or english_dict == '文件不存在':
    26. print('哦豁!您还没新增单词呢!')
    27. continue
    28. # 选择背默模式 -----------------------------------------------------------
    29. while True:
    30. choice_mode = input(f'1.单词背默\t2.中文背默\t0.退出\n'
    31. f'{"-"*32}\n请选择模式序号输入:')
    32. # 1.单词背默模式 -------------------------------------------------------
    33. if choice_mode == '1':
    34. input_title('单词背默') # 打印标题
    35. # 开始背默
    36. break_flag = 0 # 旗帜
    37. for i, j in english_dict.items():
    38. while True:
    39. english = input(f'请输入{j}的\n英文翻译(退出:q 下一个:n):')
    40. # 回答正确
    41. if english.strip(' ') == i:
    42. print('回答正确,再接再厉')
    43. break
    44. # 退出
    45. elif english.strip(' ') == 'q' or english.strip(' ') == 'Q':
    46. break_flag = 1
    47. break
    48. # 下一个
    49. elif english.strip(' ') == 'n' or english.strip(' ') == 'N':
    50. break
    51. # 错误
    52. elif english.strip(' ') != '':
    53. print(f'回答错误: {english}')
    54. print(f'正确答案: {i}')
    55. print('-' * 32) # 打印分割线
    56. # 退出两层循环
    57. if break_flag:
    58. break_flag = 0
    59. break
    60. print('-' * 32) # 打印分割线
    61. # 2.翻译背默模式 -------------------------------------------------------
    62. elif choice_mode == '2':
    63. input_title('中文背默') # 打印标题
    64. # 开始背默
    65. break_flag = 0 # 旗帜
    66. error_flag = 0 # 旗帜
    67. for i, j in english_dict.items():
    68. while True:
    69. chinese_list = [] # 输入内容容器
    70. chinese = input(f'请输入 {i} 的\n中文翻译(退出:q 下一个:n):')
    71. # 获取输入内容
    72. for k in chinese.split(' '):
    73. if k:
    74. chinese_list.append(k)
    75. # 判断输入内容是否为空
    76. if not chinese_list:
    77. print("-" * 32) # 打印分割线
    78. continue
    79. # 下一个
    80. elif chinese_list[0] in list('nN'):
    81. break
    82. # 退出
    83. elif chinese_list[0] in list('qQ'):
    84. break_flag = 1
    85. break
    86. # 全部正确
    87. elif chinese_list == j:
    88. print('全部回答正确')
    89. break
    90. # 部分正确
    91. for t in chinese_list:
    92. if t in j and t == chinese_list[-1]:
    93. print('回答正确一部分')
    94. print(f'完整答案: {j}')
    95. break_flag = 1
    96. break
    97. # 错误
    98. elif t not in j:
    99. if not error_flag:
    100. print('错误内容: ', end='')
    101. error_flag = 1
    102. print(f'{t}', end=' ')
    103. # 退出两层循环
    104. if break_flag:
    105. break_flag = 0
    106. break
    107. # 打印内容补全
    108. elif error_flag:
    109. error_flag = 0
    110. print(f'\n完整答案: {j}')
    111. print("-" * 32) # 打印分割线
    112. # 退出两层循环
    113. if break_flag:
    114. break_flag = 0
    115. break
    116. print("-" * 32) # 打印分割线
    117. # 0.退出 -------------------------------------------------------------
    118. elif choice_mode == '0':
    119. break
    120. input_title('背默单词') # 打印标题
    121. # 3.新增单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    122. elif choice == '3':
    123. input_title('新增单词') # 打印标题
    124. # 键盘输入单词和翻译
    125. while True:
    126. print('标准格式: instance 例子 实例')
    127. data = input('请输入单词及中文翻译(退出:q):')
    128. # 获取输入内容
    129. data_list = [] # 输入内容容器
    130. for i in data.split(' '):
    131. if i:
    132. data_list.append(i)
    133. # 判断输入内容格式是否正确
    134. if len(data_list) == 0 or (len(data_list) == 1 and data_list[0] not in tuple('qQ')):
    135. print('-' * 32)
    136. continue
    137. # 退出
    138. elif data_list[0] in tuple('qQ'):
    139. break
    140. # 判断输入单词是否不在字典里
    141. elif data_list[0] not in english_dict.keys():
    142. english_dict[data_list[0]] = data_list[1::] # 保存到字典
    143. print(f'已新增成功: {data_list[0]} {english_dict[data_list[0]]}')
    144. # 判断输入单词是否在字典里
    145. elif data_list[0] in english_dict.keys():
    146. print(f'该单词: {data_list[0]} {english_dict[data_list[0]]}\n'
    147. f'已存在,无法新增: {data_list[0]} {data_list[1::]}')
    148. print('-'*32) # 打印分隔线
    149. # 保存到文件里
    150. from 小功能包.词典文件 import dict_file
    151. dict_file.file_write(english_dict, file_path, split)
    152. # 4.删除单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    153. elif choice == '4':
    154. input_title('删除单词') # 打印标题
    155. # 判断是否为空文件
    156. if english_dict == dict():
    157. print('哦豁!您还没新增单词呢!')
    158. continue
    159. # 删除单词
    160. while True:
    161. data = input('请输入要删除的[单词/中文](退出:q):')
    162. # 退出
    163. if data.strip(' ') == 'q' or data.strip(' ') == 'Q':
    164. break
    165. # 在字典查找与输入内容相关单词
    166. dict_keys = dict_find(data)
    167. # 判断是否找到数据
    168. if len(dict_keys) == 0:
    169. print(f'很遗憾,未找到与" {data} "相关内容')
    170. # 单个单词直接删除
    171. elif len(dict_keys) == 1:
    172. print(f'原单词: {dict_keys[0]} {english_dict[dict_keys[0]]}')
    173. remove = input('请确认是否删除(y/n):')
    174. # 判断输入是否为空
    175. if not remove.strip(' '):
    176. print('已放弃本次删除操作')
    177. # 确定删除
    178. elif remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    179. print('已成功删除单词')
    180. english_dict.pop(dict_keys[0]) # 删除
    181. # 其他
    182. else:
    183. print('已放弃本次删除操作')
    184. # 多个单词选择删除
    185. elif len(dict_keys) > 1:
    186. while True:
    187. # 打印查找到的数据
    188. count = 0 # 计数
    189. print(f'已为您找到以下单词:')
    190. for i in dict_keys:
    191. count += 1
    192. print(f'{count}. {i} {english_dict[i]}')
    193. choice_change = input('请输入要删除的单词序号(退出:q):')
    194. # 把序号转化为字符串存入列表
    195. num_list = []
    196. for i in range(1, len(dict_keys)+1):
    197. num_list.append(str(i))
    198. # 退出
    199. if choice_change.strip(' ') in list('qQ'):
    200. break
    201. # 当输入正确序号时
    202. elif choice_change.strip(' ') in num_list:
    203. print(f'原单词: {dict_keys[int(choice_change)-1]} '
    204. f'{english_dict[dict_keys[int(choice_change)-1]]}')
    205. remove = input(f'请确认是否要删除(y/n):')
    206. # 确定删除
    207. if remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    208. print('已成功删除单词')
    209. english_dict.pop(dict_keys[int(choice_change)-1]) # 删除
    210. # 其他
    211. else:
    212. print('已放弃本次删除操作')
    213. print('-' * 32) # 打印分割线
    214. break # 跳出本次循环
    215. input_title('删除单词') # 打印标题
    216. # 更新文件数据
    217. from 小功能包.词典文件 import dict_file
    218. dict_file.file_write(english_dict, file_path, split)
    219. # 5.修改单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    220. elif choice == '5':
    221. input_title('修改单词') # 打印标题
    222. # 判断是否为空文件
    223. if english_dict == dict():
    224. print('哦豁!您还没新增单词呢!')
    225. continue
    226. # 修改单词
    227. while True:
    228. data = input('请输入要修改的[单词/中文](退出:q):')
    229. # 退出
    230. if data.strip(' ') == 'q' or data.strip(' ') == 'Q':
    231. break
    232. # 在字典查找与输入内容相关单词
    233. dict_keys = dict_find(data)
    234. # 未找到数据
    235. if len(dict_keys) == 0:
    236. print(f'很遗憾,未找到与" {data} "相关内容')
    237. # 单个单词直接修改
    238. elif len(dict_keys) == 1:
    239. print(f'原单词: {dict_keys[0]} {english_dict[dict_keys[0]]}')
    240. # 输入新单词
    241. data_list = new_data_input(dict_keys)
    242. # 返回
    243. if not data_list:
    244. input_title('修改单词') # 打印标题
    245. continue
    246. print(f'{dict_keys[0]} {english_dict[dict_keys[0]]} '
    247. f'修改为 {data_list[0]} {data_list[1::]}')
    248. remove = input('请确认是否修改(y/n):')
    249. # 输入空字符
    250. if not remove.strip(' '):
    251. print('已放弃本次修改操作')
    252. # 确定修改
    253. elif remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    254. print('已成功修改单词')
    255. english_dict.pop(dict_keys[0]) # 删除
    256. english_dict[data_list[0]] = data_list[1::] # 添加
    257. # 其他
    258. else:
    259. print('已放弃本次修改操作')
    260. # 多个单词选择修改
    261. elif len(dict_keys) > 1:
    262. while True:
    263. # 打印查找到的数据
    264. count = 0 # 计数
    265. print(f'已为您找到以下单词:')
    266. for i in dict_keys:
    267. count += 1
    268. print(f'{count}. {i} {english_dict[i]}')
    269. choice_change = input('请输入要修改的单词序号(退出:q):')
    270. # 把序号转化为字符串存入列表
    271. num_list = []
    272. for i in range(1, len(dict_keys)+1):
    273. num_list.append(str(i))
    274. # 退出
    275. if choice_change.strip(' ') in list('qQ'):
    276. break
    277. # 当输入正确序号时
    278. elif choice_change.strip(' ') in num_list:
    279. print(f'原单词: {dict_keys[int(choice_change)-1]} '
    280. f'{english_dict[dict_keys[int(choice_change)-1]]}')
    281. # 输入新单词
    282. data_list = new_data_input(dict_keys, dict_keys[int(choice_change)-1])
    283. # 返回
    284. if not data_list:
    285. break
    286. remove = input(f'{dict_keys[int(choice_change) - 1]} '
    287. f'{english_dict[dict_keys[int(choice_change)-1]]} '
    288. f'修改为 {data_list[0]} {data_list[1::]}'
    289. f'\n请确认是否要修改(y/n):')
    290. # 确定修改
    291. if remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    292. print('已成功修改单词')
    293. english_dict.pop(dict_keys[int(choice_change)-1]) # 删除
    294. english_dict[data_list[0]] = data_list[1::] # 添加
    295. # 其他
    296. else:
    297. print('已放弃本次修改操作')
    298. print('-' * 32) # 打印分割线
    299. break # 跳出本次循环
    300. input_title('修改单词') # 打印标题
    301. # 更新文件数据
    302. from 小功能包.词典文件 import dict_file
    303. dict_file.file_write(english_dict, file_path, split)
    304. # 0.退出 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    305. elif choice == '0':
    306. input_title('退出生词本', 11) # 打印标题
    307. break
    308. # 其他
    309. else:
    310. input_info = '请重新输入菜单序号:'

    3、自定义模块和包导入,实现代码交互,代码如下:

    1. """
    2. 字典文件模块
    3. """
    4. # 用于模块导入使用通配符'*'
    5. __all__ = ['make_dir', 'make_file', 'dict_file']
    6. """****************************** 普通函数 ******************************"""
    7. # 新建目录 ----------------------------------------------------------------
    8. def make_dir(path):
    9. # 路径分割
    10. path_list = ''
    11. for i in path.split('\\')[:-1:]:
    12. path_list += i + '\\'
    13. # 新建目录
    14. import os
    15. if not os.path.exists(path_list):
    16. os.mkdir(path_list)
    17. # 新建文件 ---------------------------------------------------------------
    18. def make_file(path):
    19. # 判断文件是否存在
    20. import os
    21. if not os.path.exists(path):
    22. file = open(file=path, mode='w')
    23. file.close()
    24. """****************************** 功能类 ******************************"""
    25. # 字典文件类 ==============================================================
    26. class dict_file:
    27. def __init__(self):
    28. pass
    29. # 读取文件数据 ----------------------------------------------------
    30. @classmethod
    31. def file_read(cls, dict, path, split):
    32. # 判断文件是否存在
    33. import os
    34. if not os.path.exists(path):
    35. return '文件不存在'
    36. # 读取文件数据
    37. file = open(file=path, mode='r', encoding='utf-8')
    38. data_list = file.readlines()
    39. file.close()
    40. # 判断文件是否为空
    41. if data_list == dict:
    42. return dict
    43. # 分割获取需要的数据
    44. for i in data_list:
    45. split_list = i.strip('\n').split(split)
    46. dict[split_list[0]] = split_list[1::]
    47. return dict
    48. # 写入文件数据 ---------------------------------------------------
    49. @classmethod
    50. def file_write(cls, dict, path, split):
    51. make_dir(path) # 创建目录
    52. # make_file(path) # 创建文件
    53. # 数据写入文件
    54. file = open(file=path, mode='w', encoding='utf-8')
    55. for i, j in dict.items():
    56. file.write(f'{i}')
    57. for k in j:
    58. file.write(f'{split}{k}')
    59. file.write('\n')
    60. file.close()
    61. """****************************** 代码测试 ******************************"""
    62. # 代码测试 ****************************************************************
    63. if __name__ == '__main__':
    64. print(dict_file.file_read(dict(), '.\\..\\123\\456.txt', '(*)'))
    65. dict_file.file_write({'present': ['现在', '礼物']}, '.\\..\\111\\222.txt', '(*)')
    66. else:
    67. pass

    4、所有功能整合完成,代码如下:

    1. """
    2. 英语生词本(文件版)
    3. """
    4. # 打印初始化菜单 ===================================================================
    5. def init_menu():
    6. print(f'{"="*12}英语生词本{"="*12}\n'
    7. f'1.查看单词\t2.背默单词\t'
    8. f'3.新增单词\n4.删除单词\t'
    9. f'5.修改单词\t0.退出\n{"-"*32}')
    10. # 打印标题 =========================================================================
    11. def input_title(str, fill=12):
    12. print(f'{"*"*fill} {str} {"*"*fill}')
    13. # 创建文件 ========================================================================
    14. def make_file():
    15. from 小功能包 import 词典文件
    16. 词典文件.make_dir(file_path) # 创建目录
    17. 词典文件.make_file(file_path) # 创建文件
    18. # 读取目标文件数据 ==================================================================
    19. def read_file_data():
    20. from 小功能包.词典文件 import dict_file
    21. global english_dict
    22. english_dict = dict_file.file_read(dict=dict(), path=file_path, split=split)
    23. # 数据查找 ========================================================================
    24. def dict_find(find_str):
    25. # 查找与输入内容相关单词
    26. dict_keys = [] # 字典键容器
    27. keyword = [] # 关键字
    28. # 分离查找关键字
    29. for i in find_str.strip(' ').split(' '):
    30. if i:
    31. keyword.append(i)
    32. # 查找关键字
    33. for i, j in english_dict.items():
    34. only_flag = 1 # 只执行一次
    35. for k in keyword:
    36. if i == k or k in j:
    37. if only_flag: # 只执行一次
    38. only_flag = 0
    39. dict_keys.append(i)
    40. print('-' * 32) # 打印分割线
    41. return dict_keys
    42. # 新单词输入 ========================================================================
    43. def new_data_input(dict_keys, str=None):
    44. # 剔除单词
    45. new_keys = []
    46. if str:
    47. new_keys.extend(dict_keys)
    48. new_keys.remove(str)
    49. # 新单词输入
    50. if dict_keys:
    51. while True:
    52. data_list = [] # 输入内容容器
    53. new_data = input('请输入新单词及中文翻译(退出:q):')
    54. # 获取输入内容
    55. for i in new_data.split(' '):
    56. if i:
    57. data_list.append(i)
    58. # 判断输入内容格式是否正确
    59. if len(data_list) == 0 or (len(data_list) == 1 and data_list[0] not in tuple('qQ')):
    60. print('标准格式: instance 例子 实例')
    61. # 退出
    62. elif data_list[0] in tuple('qQ'):
    63. return []
    64. # 判断单词是否存在
    65. elif data_list[0] in english_dict.keys() and data_list[0] not in dict_keys:
    66. print(f'该单词: {data_list[0]} {english_dict[data_list[0]]}\n'
    67. f'已存在,无法命名为: {data_list[0]}')
    68. elif data_list[0] in new_keys and str:
    69. print(f'该单词: {data_list[0]} {english_dict[data_list[0]]}\n'
    70. f'已存在,无法命名为: {data_list[0]}')
    71. else:
    72. break
    73. print('-' * 32) # 打印分割线
    74. return data_list
    75. # 全局变量 ========================================================================
    76. english_dict = dict() # 用于暂存英语生词字典
    77. file_path = '.\\..\\English\\data.txt' # 文件保存路径
    78. split = '(*)' # 数据分割符号
    79. input_info = '请输入菜单序号:'
    80. # 功能实现 ************************************************************************
    81. while True:
    82. init_menu() # 打印初始化菜单
    83. make_file() # 新建文件
    84. read_file_data() # 读取目标文件数据
    85. # 菜单选择
    86. choice = input(input_info)
    87. input_info = '请输入菜单序号:'
    88. # 1.查看单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    89. if choice == '1':
    90. input_title('查看单词') # 打印标题
    91. # 判断是否为空文件
    92. if english_dict == dict():
    93. print('哦豁!您还没新增单词呢!')
    94. continue
    95. # 打印单词
    96. count = 0 # 计数
    97. for i, j in english_dict.items():
    98. count += 1
    99. print(f'{count}. {i}\t\t\t{j}')
    100. # 2.背默单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    101. elif choice == '2':
    102. input_title('背默单词') # 打印标题
    103. # 判断是否为空文件
    104. if english_dict == dict() or english_dict == '文件不存在':
    105. print('哦豁!您还没新增单词呢!')
    106. continue
    107. # 选择背默模式 -----------------------------------------------------------
    108. while True:
    109. choice_mode = input(f'1.单词背默\t2.中文背默\t0.退出\n'
    110. f'{"-"*32}\n请选择模式序号输入:')
    111. # 1.单词背默模式 -------------------------------------------------------
    112. if choice_mode == '1':
    113. input_title('单词背默') # 打印标题
    114. # 开始背默
    115. break_flag = 0 # 旗帜
    116. for i, j in english_dict.items():
    117. while True:
    118. english = input(f'请输入{j}的\n英文翻译(退出:q 下一个:n):')
    119. # 回答正确
    120. if english.strip(' ') == i:
    121. print('回答正确,再接再厉')
    122. break
    123. # 退出
    124. elif english.strip(' ') == 'q' or english.strip(' ') == 'Q':
    125. break_flag = 1
    126. break
    127. # 下一个
    128. elif english.strip(' ') == 'n' or english.strip(' ') == 'N':
    129. break
    130. # 错误
    131. elif english.strip(' ') != '':
    132. print(f'回答错误: {english}')
    133. print(f'正确答案: {i}')
    134. print('-' * 32) # 打印分割线
    135. # 退出两层循环
    136. if break_flag:
    137. break_flag = 0
    138. break
    139. print('-' * 32) # 打印分割线
    140. # 2.翻译背默模式 -------------------------------------------------------
    141. elif choice_mode == '2':
    142. input_title('中文背默') # 打印标题
    143. # 开始背默
    144. break_flag = 0 # 旗帜
    145. error_flag = 0 # 旗帜
    146. for i, j in english_dict.items():
    147. while True:
    148. chinese_list = [] # 输入内容容器
    149. chinese = input(f'请输入 {i} 的\n中文翻译(退出:q 下一个:n):')
    150. # 获取输入内容
    151. for k in chinese.split(' '):
    152. if k:
    153. chinese_list.append(k)
    154. # 判断输入内容是否为空
    155. if not chinese_list:
    156. print("-" * 32) # 打印分割线
    157. continue
    158. # 下一个
    159. elif chinese_list[0] in list('nN'):
    160. break
    161. # 退出
    162. elif chinese_list[0] in list('qQ'):
    163. break_flag = 1
    164. break
    165. # 全部正确
    166. elif chinese_list == j:
    167. print('全部回答正确')
    168. break
    169. # 部分正确
    170. for t in chinese_list:
    171. if t in j and t == chinese_list[-1]:
    172. print('回答正确一部分')
    173. print(f'完整答案: {j}')
    174. break_flag = 1
    175. break
    176. # 错误
    177. elif t not in j:
    178. if not error_flag:
    179. print('错误内容: ', end='')
    180. error_flag = 1
    181. print(f'{t}', end=' ')
    182. # 退出两层循环
    183. if break_flag:
    184. break_flag = 0
    185. break
    186. # 打印内容补全
    187. elif error_flag:
    188. error_flag = 0
    189. print(f'\n完整答案: {j}')
    190. print("-" * 32) # 打印分割线
    191. # 退出两层循环
    192. if break_flag:
    193. break_flag = 0
    194. break
    195. print("-" * 32) # 打印分割线
    196. # 0.退出 -------------------------------------------------------------
    197. elif choice_mode == '0':
    198. break
    199. input_title('背默单词') # 打印标题
    200. # 3.新增单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    201. elif choice == '3':
    202. input_title('新增单词') # 打印标题
    203. # 键盘输入单词和翻译
    204. while True:
    205. print('标准格式: instance 例子 实例')
    206. data = input('请输入单词及中文翻译(退出:q):')
    207. # 获取输入内容
    208. data_list = [] # 输入内容容器
    209. for i in data.split(' '):
    210. if i:
    211. data_list.append(i)
    212. # 判断输入内容格式是否正确
    213. if len(data_list) == 0 or (len(data_list) == 1 and data_list[0] not in tuple('qQ')):
    214. print('-' * 32)
    215. continue
    216. # 退出
    217. elif data_list[0] in tuple('qQ'):
    218. break
    219. # 判断输入单词是否不在字典里
    220. elif data_list[0] not in english_dict.keys():
    221. english_dict[data_list[0]] = data_list[1::] # 保存到字典
    222. print(f'已新增成功: {data_list[0]} {english_dict[data_list[0]]}')
    223. # 判断输入单词是否在字典里
    224. elif data_list[0] in english_dict.keys():
    225. print(f'该单词: {data_list[0]} {english_dict[data_list[0]]}\n'
    226. f'已存在,无法新增: {data_list[0]} {data_list[1::]}')
    227. print('-'*32) # 打印分隔线
    228. # 保存到文件里
    229. from 小功能包.词典文件 import dict_file
    230. dict_file.file_write(english_dict, file_path, split)
    231. # 4.删除单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    232. elif choice == '4':
    233. input_title('删除单词') # 打印标题
    234. # 判断是否为空文件
    235. if english_dict == dict():
    236. print('哦豁!您还没新增单词呢!')
    237. continue
    238. # 删除单词
    239. while True:
    240. data = input('请输入要删除的[单词/中文](退出:q):')
    241. # 退出
    242. if data.strip(' ') == 'q' or data.strip(' ') == 'Q':
    243. break
    244. # 在字典查找与输入内容相关单词
    245. dict_keys = dict_find(data)
    246. # 判断是否找到数据
    247. if len(dict_keys) == 0:
    248. print(f'很遗憾,未找到与" {data} "相关内容')
    249. # 单个单词直接删除
    250. elif len(dict_keys) == 1:
    251. print(f'原单词: {dict_keys[0]} {english_dict[dict_keys[0]]}')
    252. remove = input('请确认是否删除(y/n):')
    253. # 判断输入是否为空
    254. if not remove.strip(' '):
    255. print('已放弃本次删除操作')
    256. # 确定删除
    257. elif remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    258. print('已成功删除单词')
    259. english_dict.pop(dict_keys[0]) # 删除
    260. # 其他
    261. else:
    262. print('已放弃本次删除操作')
    263. # 多个单词选择删除
    264. elif len(dict_keys) > 1:
    265. while True:
    266. # 打印查找到的数据
    267. count = 0 # 计数
    268. print(f'已为您找到以下单词:')
    269. for i in dict_keys:
    270. count += 1
    271. print(f'{count}. {i} {english_dict[i]}')
    272. choice_change = input('请输入要删除的单词序号(退出:q):')
    273. # 把序号转化为字符串存入列表
    274. num_list = []
    275. for i in range(1, len(dict_keys)+1):
    276. num_list.append(str(i))
    277. # 退出
    278. if choice_change.strip(' ') in list('qQ'):
    279. break
    280. # 当输入正确序号时
    281. elif choice_change.strip(' ') in num_list:
    282. print(f'原单词: {dict_keys[int(choice_change)-1]} '
    283. f'{english_dict[dict_keys[int(choice_change)-1]]}')
    284. remove = input(f'请确认是否要删除(y/n):')
    285. # 确定删除
    286. if remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    287. print('已成功删除单词')
    288. english_dict.pop(dict_keys[int(choice_change)-1]) # 删除
    289. # 其他
    290. else:
    291. print('已放弃本次删除操作')
    292. print('-' * 32) # 打印分割线
    293. break # 跳出本次循环
    294. input_title('删除单词') # 打印标题
    295. # 更新文件数据
    296. from 小功能包.词典文件 import dict_file
    297. dict_file.file_write(english_dict, file_path, split)
    298. # 5.修改单词 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    299. elif choice == '5':
    300. input_title('修改单词') # 打印标题
    301. # 判断是否为空文件
    302. if english_dict == dict():
    303. print('哦豁!您还没新增单词呢!')
    304. continue
    305. # 修改单词
    306. while True:
    307. data = input('请输入要修改的[单词/中文](退出:q):')
    308. # 退出
    309. if data.strip(' ') == 'q' or data.strip(' ') == 'Q':
    310. break
    311. # 在字典查找与输入内容相关单词
    312. dict_keys = dict_find(data)
    313. # 未找到数据
    314. if len(dict_keys) == 0:
    315. print(f'很遗憾,未找到与" {data} "相关内容')
    316. # 单个单词直接修改
    317. elif len(dict_keys) == 1:
    318. print(f'原单词: {dict_keys[0]} {english_dict[dict_keys[0]]}')
    319. # 输入新单词
    320. data_list = new_data_input(dict_keys)
    321. # 返回
    322. if not data_list:
    323. input_title('修改单词') # 打印标题
    324. continue
    325. print(f'{dict_keys[0]} {english_dict[dict_keys[0]]} '
    326. f'修改为 {data_list[0]} {data_list[1::]}')
    327. remove = input('请确认是否修改(y/n):')
    328. # 输入空字符
    329. if not remove.strip(' '):
    330. print('已放弃本次修改操作')
    331. # 确定修改
    332. elif remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    333. print('已成功修改单词')
    334. english_dict.pop(dict_keys[0]) # 删除
    335. english_dict[data_list[0]] = data_list[1::] # 添加
    336. # 其他
    337. else:
    338. print('已放弃本次修改操作')
    339. # 多个单词选择修改
    340. elif len(dict_keys) > 1:
    341. while True:
    342. # 打印查找到的数据
    343. count = 0 # 计数
    344. print(f'已为您找到以下单词:')
    345. for i in dict_keys:
    346. count += 1
    347. print(f'{count}. {i} {english_dict[i]}')
    348. choice_change = input('请输入要修改的单词序号(退出:q):')
    349. # 把序号转化为字符串存入列表
    350. num_list = []
    351. for i in range(1, len(dict_keys)+1):
    352. num_list.append(str(i))
    353. # 退出
    354. if choice_change.strip(' ') in list('qQ'):
    355. break
    356. # 当输入正确序号时
    357. elif choice_change.strip(' ') in num_list:
    358. print(f'原单词: {dict_keys[int(choice_change)-1]} '
    359. f'{english_dict[dict_keys[int(choice_change)-1]]}')
    360. # 输入新单词
    361. data_list = new_data_input(dict_keys, dict_keys[int(choice_change)-1])
    362. # 返回
    363. if not data_list:
    364. break
    365. remove = input(f'{dict_keys[int(choice_change) - 1]} '
    366. f'{english_dict[dict_keys[int(choice_change)-1]]} '
    367. f'修改为 {data_list[0]} {data_list[1::]}'
    368. f'\n请确认是否要修改(y/n):')
    369. # 确定修改
    370. if remove.strip(' ') == 'y' or remove.strip(' ') == 'Y':
    371. print('已成功修改单词')
    372. english_dict.pop(dict_keys[int(choice_change)-1]) # 删除
    373. english_dict[data_list[0]] = data_list[1::] # 添加
    374. # 其他
    375. else:
    376. print('已放弃本次修改操作')
    377. print('-' * 32) # 打印分割线
    378. break # 跳出本次循环
    379. input_title('修改单词') # 打印标题
    380. # 更新文件数据
    381. from 小功能包.词典文件 import dict_file
    382. dict_file.file_write(english_dict, file_path, split)
    383. # 0.退出 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    384. elif choice == '0':
    385. input_title('退出生词本', 11) # 打印标题
    386. break
    387. # 其他
    388. else:
    389. input_info = '请重新输入菜单序号:'

    运行结果:

    1. ============英语生词本============
    2. 1.查看单词 2.背默单词 3.新增单词
    3. 4.删除单词 5.修改单词 0.退出
    4. --------------------------------
    5. 请输入菜单序号:1
    6. ************ 查看单词 ************
    7. 哦豁!您还没新增单词呢!
    8. ============英语生词本============
    9. 1.查看单词 2.背默单词 3.新增单词
    10. 4.删除单词 5.修改单词 0.退出
    11. --------------------------------
    12. 请输入菜单序号:3
    13. ************ 新增单词 ************
    14. 标准格式: instance 例子 实例
    15. 请输入单词及中文翻译(退出:q):title 题目 标题
    16. 已新增成功: title ['题目', '标题']
    17. --------------------------------
    18. 标准格式: instance 例子 实例
    19. 请输入单词及中文翻译(退出:q):turtle 海龟
    20. 已新增成功: turtle ['海龟']
    21. --------------------------------
    22. 标准格式: instance 例子 实例
    23. 请输入单词及中文翻译(退出:q):q
    24. ============英语生词本============
    25. 1.查看单词 2.背默单词 3.新增单词
    26. 4.删除单词 5.修改单词 0.退出
    27. --------------------------------
    28. 请输入菜单序号:1
    29. ************ 查看单词 ************
    30. 1. title ['题目', '标题']
    31. 2. turtle ['海龟']

    作者:周华

    创作日期:2023/10/14

  • 相关阅读:
    代码随想录——接雨水(双指针&动态规划&单调栈)
    linux搭建git服务器,windows客户端配置git
    mysql MVC jsp实现表分页
    【Linux】[gdb]Linux环境下如何调试代码
    SAP PI/PO 视频,自己录制
    Apache Hudi vs Delta Lake:透明TPC-DS Lakehouse性能基准
    基于ArcGIS进行空间方向性研究
    如何实现图片懒加载,原生 + React 实现方式
    Java编写简易rabbitmq生产者与消费者
    linux网络编程之TCP协议编程
  • 原文地址:https://blog.csdn.net/zhouhua2022/article/details/133827244