描述
    文件dict.txt里存储了英语单词及其中文释义,单词与释义间保证用空格分隔,需要注意的是释义中可能还有空格存在。文件内容形如:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    above prep.在…之上,高于 above-mentioned adj.上述的 abreast adv.并肩,并列 abridge v.省略,摘要 abroad adv.国外,海外 all adj.所有的 n.一切 live v.居住,生存 adj.活的
    运行程序时先输出:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入’1’时,完成问题1,输入’2’时完成问题2,输入其他数据时,输出 ‘输入错误,请重新运行程序!’‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    问题1:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    连续读入多个单词,输出单词的释义,当单词在词典中不存在时,输出’这个词我不明白’。直接输入回车时退出查询。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    问题2:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入英文句子,输出英文句子中每个单词的中文释义,每行一个单词。可连续输入句子,输入一句翻译一句,直接输入回车时退出查询。单词与释义间用一个空格分隔,当单词在词典中不存在时,输出’这个词我不明白’。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    注意:句子中若存在’s 则用 is 替换,n’t 用 not 替换。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    使用题目给出的编程模板,实现上述两个问题。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    要求读入1,则实现问题1(连续查单词的释义);‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    读入2,则实现问题2(连续读入英文句子并逐一输出句子里单词和释义。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输出单词时,所有字母均转换为小写输出,若该单词有多个词性,不改动文件里释义的格式,直接输出。

    1. # -------- ------- --------
    2. # @File : 简易英汉词典.py
    3. # @Author : 赵广辉
    4. # @Contact: vasp@qq.com
    5. # @Company: 武汉理工大学
    6. # @Version: 1.0
    7. # @Modify : 2021/12/06 23:39
    8. # Python程序设计基础,高等教育出版社
    9. # 代码量1.5-2小时
    10. # -------- ------- --------
    11. import string
    12. def create_dict(filename):
    13. """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    14. 多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    15. 将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    16. 返回字典。
    17. """
    18. dic = {} # 创建空字典
    19. with open(filename, 'r', encoding='utf-8') as data:
    20. for x in data: # 遍历文件对象
    21. x = x.strip().split(maxsplit=1) # 每行根据空格切分为列表,只切分一次
    22. dic.update({x[0].lower(): x[1]}) # 列表的两个元素作为字典的键和值加入字典中
    23. return dic
    24. def translate(dic, word):
    25. """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    26. 根据文件创建的字典,从中查询单词word,
    27. 如果查询单词存在,元组形式返回词与词的释义;
    28. 如果查询不存在,返回'这个词我不明白'
    29. """
    30. word = word.lower() # 单词转小写
    31. return word, dic.get(word,'这个词我不明白') # 查询字典,返回单词的意义,单词不存在时,返回'这个词我不明白'
    32. def sentence_to_words():
    33. """调用此函数时,先输出提示信息'请输入查询的句子:'
    34. 用户输入欲翻译的句子
    35. 若输入非空时,先将"n't"替换为 ' not'、"'s"替换为 ' is',再将标点符号替换为空格。
    36. 根据空格将句子切分为单词的列表,调用translate逐个单词进行翻译。
    37. 用户可重复多次输入,每输入一名翻译一句,
    38. 若直接输入回车时,输出'查询结束,正在退出...'。然后结束程序。
    39. """
    40. while True:
    41. sentence = input('请输入查询的句子:') # 输入查询的句子
    42. if sentence == '':
    43. print('查询结束,正在退出...')
    44. break
    45. sentence = sentence.replace("n't", ' not').replace("'s", ' is') # "n't"替换为 ' not',"'s"替换为 ' is'
    46. for x in string.punctuation: # 其他标点符号替换为空格
    47. sentence = sentence.replace(x, ' ')
    48. word_list = sentence.split() # 根据空格切分句子为单词的列表
    49. for word in word_list:
    50. print(*translate(word_dic, word)) # 调用函数翻译并输出释义
    51. def translate_word():
    52. """调用此函数时,先输出提示信息:'请输入查询的单词:'
    53. 用户可循环输入欲翻译的单词,若直接输入回车时,输出'查询结束,正在退出...'。
    54. 输入非空时输出翻译结果
    55. """
    56. while True:
    57. word = input('请输入查询的单词:') # 输入查询的单词
    58. if word == '':
    59. print('查询结束,正在退出...')
    60. break
    61. else:
    62. print(*translate(word_dic, word))
    63. if __name__ == '__main__':
    64. file = './dict.txt' # 表示文件名的字符串,表示位于当前路径下的'dict.txt'文件
    65. word_dic = create_dict(file) # 调用函数返回字典类型的数据
    66. print('载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”')
    67. choice = input() # 输入操作选项
    68. if choice == '1':
    69. translate_word() # 翻译单词
    70. elif choice == '2':
    71. sentence_to_words() # 翻译句子
    72. else:
    73. print('输入错误,请重新运行程序!')

    增加背单词功能

    1. # -------- ------- --------
    2. # @File : 简易英汉词典.py
    3. # @Author : 赵广辉
    4. # @Contact: vasp@qq.com
    5. # @Company: 武汉理工大学
    6. # @Version: 1.0
    7. # @Modify : 2021/12/06 23:39
    8. # Python程序设计基础,高等教育出版社
    9. # 代码量1.5-2小时
    10. # -------- ------- --------
    11. import random
    12. import string
    13. def read_to_dic(filename):
    14. """读文件每行根据空格切分一次,作为字典的键和值添加到字典中,返回一个字典类型数据。"""
    15. word_dic = {}
    16. with open(filename, 'r', encoding='utf-8') as data:
    17. for x in data:
    18. k, v = x.strip().split(maxsplit=1)
    19. word_dic[k] = v.split(',')
    20. return word_dic
    21. def translate_word():
    22. """调用此函数时,先输出提示信息:'请输入查询的单词:'
    23. 用户可循环输入欲翻译的单词,若直接输入回车时,输出'查询结束,正在退出...'。
    24. 输入非空时输出翻译结果
    25. """
    26. while True:
    27. word = input('请输入查询的单词:') # 输入查询的单词
    28. if word == '':
    29. print('查询结束,正在退出...')
    30. break
    31. else:
    32. print(*translate(word))
    33. def translate(word):
    34. """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    35. 根据文件创建的字典,从中查询单词word,
    36. 如果查询单词存在,元组形式返回词与词的释义;
    37. 如果查询不存在,返回'单词不存在'
    38. """
    39. word = word.lower() # 单词转小写
    40. return word, words_dic.get(word, '单词不存在') # 查询字典,返回单词的意义,单词不存在时,返回'这个词我不明白'
    41. def sentence_to_words():
    42. """调用此函数时,先输出提示信息'请输入查询的句子:'
    43. 用户输入欲翻译的句子
    44. 若输入非空时,先将"n't"替换为 ' not'、"'s"替换为 ' is',再将标点符号替换为空格。
    45. 根据空格将句子切分为单词的列表,调用translate逐个单词进行翻译。
    46. 用户可重复多次输入,每输入一名翻译一句,
    47. 若直接输入回车时,输出'查询结束,正在退出...'。然后结束程序。
    48. """
    49. while True:
    50. sentence = input('请输入查询的句子:') # 输入查询的句子
    51. if sentence == '':
    52. print('查询结束,正在退出...')
    53. break
    54. sentence = sentence.replace("n't", ' not').replace("'s", ' is') # "n't"替换为 ' not',"'s"替换为 ' is'
    55. for x in string.punctuation: # 其他标点符号替换为空格
    56. sentence = sentence.replace(x, ' ')
    57. word_list = sentence.split() # 根据空格切分句子为单词的列表
    58. for word in word_list:
    59. print(*translate(word)) # 调用函数翻译并输出释义
    60. def training():
    61. """输入一个字母,返回以这个字母开头的词汇的字典,用于单词记忆训练"""
    62. letter = input('输入今天训练单词首字母:').lower()
    63. train_dict = {k: v for k, v in words_dic.items() if k[0].lower() == letter}
    64. return train_dict
    65. def en_to_ch(train_dict):
    66. """从训练字典中随机抽取以某个字母开头的单词,用户填写词义
    67. 回答正确时,输出当前词全部释义,输入错误时,记录该单词信息,
    68. 直接输入回车时结束输入,并输出全部出错单词的信息"""
    69. wrong_answer = {}
    70. while True:
    71. word = random.choice(list(train_dict.keys()))
    72. print(f'请输入单词{word}的中文翻译:')
    73. answer = input() # 输入要查询的单词,输入非空时循环,直接回车结束循环
    74. if not answer:
    75. for k, v in wrong_answer.items():
    76. print(f'{k}的释义为:', *v)
    77. break
    78. elif answer in train_dict[word]:
    79. print(f'{word}的释义为:', *train_dict[word])
    80. else:
    81. print('答案错误')
    82. wrong_answer[word] = train_dict[word]
    83. def ch_to_en(train_dict):
    84. """从训练字典中随机抽取以某个字母开头的单词的释义,用户填写英文单词
    85. 回答正确时,输出当前词全部释义,输入错误时,记录该单词信息,
    86. 直接输入回车时结束输入,并输出全部出错单词的信息"""
    87. wrong_answer = {}
    88. while True:
    89. word, chinese = random.choice(list(train_dict.items()))
    90. print(f'请输入{chinese}对应的单词:')
    91. answer = input() # 输入单词
    92. if not answer: # 直接输入回车时结束训练
    93. print('今天答错的词汇如下:')
    94. for k, v in wrong_answer.items(): # 遍历错题本,输出错误单词信息
    95. print(f'{v}的释义为:', k)
    96. break # 结束循环
    97. elif answer == word: # 若输入单词与原单词相同
    98. print(f'{answer}的单词为:', *train_dict[answer])
    99. else:
    100. print('答案错误')
    101. wrong_answer[word] = train_dict[word]
    102. def judge(option):
    103. """根据输入调用不同函数"""
    104. if option == '汉英训练':
    105. today_dict = training() # 构建训练字典
    106. ch_to_en(today_dict)
    107. elif option == '英汉训练':
    108. today_dict = training() # 构建训练字典
    109. en_to_ch(today_dict)
    110. elif option == '翻译单词':
    111. translate_word() # 翻译单词
    112. elif option == '翻译单词':
    113. sentence_to_words() # 翻译单词
    114. else:
    115. print('输入错误,请重新运行程序!')
    116. if __name__ == '__main__':
    117. file = '../data/txt/dicts.txt'
    118. words_dic = read_to_dic(file) # 读文件构建字典
    119. choice = input() # 输入操作选项
    120. judge(choice) # 根据输入调用功能函数