首页 > 解决方案 > 需要帮助在 python 中制作一个简单的字典

问题描述

我需要一个像这样工作的简单字典:首先它需要我们有 4 种语言翻译的单词数(n),然后我们在每一行(总共 n 行)输入我们拥有的单词,它们的翻译由空格分隔作为字典源,那么我们需要要求用户输入一个短语,该短语可能比以前作为字典源提供的单词多,并且该短语不仅可以是一种特定的语言,例如它可能是英语的混合,法语和德语,但我们需要将短语翻译成第一种语言,在我们的例子中是波斯语,如果没有翻译,它只会打印单词本身。所以这里是代码:

def read_dictionary():
for i in range(0, words_num):
    dict_words = str(input())
    words[dict_words.split()[0]] = dict_words.split()[1:]


def translator():
    translation = ""
    input_phrase = str(input("Enter your phrase to translate please: ")).split()
    for word in input_phrase:
        for k, v in words.items():
            if word in v:
                translation += (k + " ")
            else:
                translation += (word + " ")
    print(translation)

words_num = int(input("Enter the number of existing translated words in dictionary: "))
words = {}
read_dictionary()
translator()

所以这是示例输入和所需的输出:

**input:**
Enter the number of existing translated words in dictionary: 
4
man I je ich        
kheili very très sehr
alaghemand interested intéressé interessiert 
barnamenevisi programming laprogrammation Programmierung
Enter your phrase to translate please: 
I am very interested in programming
**output:**
man am kheili alaghemand in barnamenevisi

但它的输出是这样的:

man I I I am am am am very kheili very very interested interested alaghemand interested in in in in programming programming programming barnamenevisi 

标签: pythondictionary

解决方案


问题源于您的translator()功能。

对于word中的每个input_phrase,您遍历 中的每一k, vwords.items()。目前很好。

那么我们想要发生什么?我们想要查看每一对,k, v直到找到匹配的单词(in v),然后(如果我们这样做)我们想要将键添加ktranslation我们正在构建的单词中。如果我们没有找到匹配的单词,我们只需将原始word值添加到translation.

您的代码的问题在于,即使您确实找到了一个单词,您也会继续查看字典中剩余的键。此外,对于字典中的每个键,您要么添加它的翻译,要么添加开始word,当您只应在word找不到匹配项时添加基础。

就个人而言,我会将您的内部for循环移动到一个名为translate_word()或类似的新函数中,但是在不进行重大更改的情况下修复您的函数的简单方法translator()如下:

def translator():
    translation = ""
    input_phrase = str(input("Enter your phrase to translate please: ")).split()
    for word in input_phrase:
        found = False
        for k, v in words.items():
            if word in v:
                translation += (k + " ")
                found = True
                break
        if not found:
            translation += (word + " ")
    print(translation)

在新translator()函数中,您可以看到对于每个新单词,您将变量设置foundFalsefound将代表您是否在字典中找到合适的翻译。

然后,您将遍历字典。如果找到匹配项,则添加k到翻译中,设置foundTrue(因为您找到了翻译),然后break退出内部for循环。

退出内部for循环后,您检查是否foundword. 如果您没有找到翻译,只需wordtranslation.


推荐阅读