【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)

目录

    • 题目
      • 示例 1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
      • 示例 2
      • 示例 3
    • 思路
      • 难点1 读取文件内容变为字典
      • 难点2 分割句子为单词并翻译
    • 代码
    • 实现效果
      • 输入1
      • 输入2
      • 输入错误
      • 测试点
    • 总结


主要内容是校设课程的习题和课外学习的一些习题。

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

题目

文件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 替换。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬(实际上我一开始做题目n’t 没有替换也过了所有测试点,和替换is思路一样)

使用题目给出的编程模板,实现上述两个问题。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

要求读入1,则实现问题1(连续查单词的释义);‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

读入2,则实现问题2(连续读入英文句子并逐一输出句子里单词和释义。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输出单词时,所有字母均转换为小写输出,若该单词有多个词性,不改动文件里释义的格式,直接输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入:

1
All
woo
wool

输出:

载入字典数据成功!查询单词请输入“1”,查询句子请输入“21
请输入查询的单词:All
all adj.所有的 n.一切
请输入查询的单词:woo
woo 这个词我不明白
请输入查询的单词:wool
wool n.羊毛,毛线
请输入查询的单词:
查询结束,正在退出...

示例 2

输入:

2
To be or not to be, that's a question.

输出:

载入字典数据成功!查询单词请输入“1”,查询句子请输入“22
请输入查询的句子:To be or not to be, that's a question.
to prep.向,到
be v.是,存在
or conj.或者,即,否则
not adv.不
to prep.向,到
be v.是,存在
that adj.,那个 adv.那么
is 这个词我不明白
a 一个
question n.问题,疑问 v.询问
请输入查询的句子:
查询结束,正在退出...

示例 3

输入:

5

输出:

载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”
输入错误,请重新运行程序!

思路

难点1 读取文件内容变为字典

有异常数据干扰,thursday旁边多了一个异常符号],所以要用replace去掉这个异常
【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)_第1张图片

def create_dict(filename):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    word_dic = {}
    ls = []
    with open(filename, "r", encoding='UTF-8') as f:# encoding='UTF-8'防止编码问题错误
        for line in f.readlines():# readlines表示读取所有行
            line = line.strip('\n').replace("]", " ")  # 去掉列表中每一个元素的换行符。此外还要replace因为真的是天坑,给我们的文件中 thursday  ]n.星期四 这个单词有个“]”干扰
            line = line.split("   ")  # 分割成列表
            # print(line)
            word_dic[line[0]] = line[1]#把这一行内容加入字典
    return word_dic

难点2 分割句子为单词并翻译

单词的获取很简单,就是句子要分割后再用for循环调用对于单词的搜索函数。

    s = input("请输入查询的句子:")
    while (s != ""):
        s=s.replace(".", " ").replace(", ", " ").replace("'s", " is").replace("n't"," not").split(" ")#分割和替换
        for i in s:#如果说分割出了空的字符串,不进行判断直接跳过
            if i=="":
                continue
            getWord=translate(word_dic, i)
            print(getWord[0],getWord[1])
        s = input("请输入查询的句子:")

    print('查询结束,正在退出...')

代码

import string


def create_dict(filename):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    word_dic = {}
    ls = []
    with open(filename, "r", encoding='UTF-8') as f:# encoding='UTF-8'防止编码问题错误
        for line in f.readlines():# readlines表示读取所有行
            line = line.strip('\n').replace("]", " ")  # 去掉列表中每一个元素的换行符。此外还要replace因为真的是天坑,给我们的文件中 thursday  ]n.星期四 这个单词有个“]”干扰
            line = line.split("   ")  # 分割成列表
            # print(line)
            word_dic[line[0]] = line[1]#把这一行内容加入字典
    return word_dic


def translate(dic, word):
    """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    根据文件创建的字典,从中查询单词word,
    如果查询单词存在,元组形式返回词与词的释义;
    如果查询不存在,返回'这个词我不明白'
    """
    word=word.lower() #小写
    if dic.get(word, '这个词我不明白') != '这个词我不明白':
        return word, dic.get(word, '这个词我不明白')
    else:
        return word,'这个词我不明白'


def sentence_to_words():
    """调用此函数时,先输出提示信息'请输入查询的句子:'
    用户输入欲翻译的句子
        若输入非空时,先将"n't"替换为 ' not'、"'s"替换为 ' is',再将标点符号替换为空格。
    根据空格将句子切分为单词的列表,调用translate逐个单词进行翻译。
    用户可重复多次输入,每输入一名翻译一句,
    若直接输入回车时,输出'查询结束,正在退出...'。然后结束程序。
    """
    s = input("请输入查询的句子:")
    while (s != ""):
        s=s.replace(".", " ").replace(", ", " ").replace("'s", " is").replace("n't"," not").split(" ")#分割和替换
        for i in s:#如果说分割出了空的字符串,不进行判断直接跳过
            if i=="":
                continue
            getWord=translate(word_dic, i)
            print(getWord[0],getWord[1])
        s = input("请输入查询的句子:")

    print('查询结束,正在退出...')


# 点击在此输入一行或多行代码


def translate_word():
    """调用此函数时,先输出提示信息:'请输入查询的单词:'
    用户可循环输入欲翻译的单词,若直接输入回车时,输出'查询结束,正在退出...'。
    输入非空时输出翻译结果
    """
    s = input("请输入查询的单词:")
    while (s != ""):
        print(translate(word_dic, s)[0],translate(word_dic, s)[1])
        s = input("请输入查询的单词:")
    print('查询结束,正在退出...')


# 点击在此输入一行或多行代码


if __name__ == '__main__':
    file = 'dict.txt'  # 表示文件名的字符串,表示位于当前路径下的'dict.txt'文件
    word_dic = create_dict(file)  # 调用函数返回字典类型的数据
    # print(word_dic)
    print('载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”')
    choice = input()  # 输入操作选项
    if choice == '1':
        translate_word()  # 翻译单词
    elif choice == '2':
        sentence_to_words()  # 翻译句子
    else:
        print('输入错误,请重新运行程序!')


实现效果

输入1

【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)_第2张图片

输入2

【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)_第3张图片

输入错误

【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)_第4张图片

测试点

【Python习题】简易英汉字典(project-ssss)(题目的坑解析+实现代码)_第5张图片


总结

大家喜欢的话,给个,点个关注!给大家分享更多有趣好玩的Python习题!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-3-1

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

【更多内容敬请期待】


你可能感兴趣的:(python,#,python习题,python)