正如你从我的问题中了解到的,我是编程新手,作为大多数新手,
我在理解一些代码时遇到了问题。我在python中遇到了以下代码
将一些单词从德语翻译成英语并返回一个字符串:

deu2eng = {
'ich':'I',
'gehe':'go',
'nach':'to',
'die':'the',
'kirche':'church'}

def trans(eng2deu):
    translation = ''
    for word in eng2deu.split():
        if word in deu2eng:
            translation+= deu2eng[word] + ' '
        else:
            translation += word + ' '
    return translation

当我运行以下命令时,它起作用:
trans('ich gehe nach die kirche')
但是也有一些问题。我无法理解如何使它不区分大小写(例如,如果我键入Kirche而不是Kirche,它将返回Kirche而不是church)我试着用下()
方法无效。但最重要的是,我不明白下面这句话以及它为什么有效:
translation+= deu2eng[word] + ' '

根据您的推断,这是非常基本的,但是我想完全理解这段代码发生了什么,因为我陷入了上述两件事。

最佳答案

如果你对编程还不熟悉的话,把注释放进去阅读新代码总是很有帮助的。

# Initializes your basic "translation" for each word, i.e. ich = I
# Notice that ich is in all lower case letters, which affects your matching in your trans function
deu2eng = {
'ich':'I',
'gehe':'go',
'nach':'to',
'die':'the',
'kirche':'church'}

def trans(eng2deu):
    translation = ''
    # Start of your for loop, this does 2 things:
    # (1) Splits up your sentence using the space character, i.e. ich gehe nach die kirche => [ich gehe, nach, die, kirche]
    # (2) Loops through your split up sentence word per word
    for word in eng2deu.split():
        # Now we check if the word is in deu2eng,
        # i.e. is ich a key in deu2eng (a key is case sensitive)
        if word in deu2eng:
            # If we find the key, then we get the corresponding value of our word, i.e. ich = I, and then append it to our translation variable.
            translation += deu2eng[word] + ' '
        else:
            # If not, then we use the original word
            translation += word + ' '
    return translation

现在注意您的if语句if word in deu2eng,我们提到它检查特定的key是否为deu2eng中的值,我们还提到检查本身是区分大小写的,如果它失败,则默认为else大小写。因此,要解决与它不正确匹配的问题,我们只需使用wordlower()更改为其小写值:
key = word.lower()
if key in deu2eng:
    translation+= deu2eng[key] + ' '
else:
    translation += word + ' '

尽管您可以通过以下方法简化:
translations += deu2eng.get(word.lower(), word) + ' '

阅读python文档也很好,这里有一些您正在寻找的参考:
dict
split

09-11 17:17