正如你从我的问题中了解到的,我是编程新手,作为大多数新手,
我在理解一些代码时遇到了问题。我在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
大小写。因此,要解决与它不正确匹配的问题,我们只需使用word
将lower()
更改为其小写值:key = word.lower()
if key in deu2eng:
translation+= deu2eng[key] + ' '
else:
translation += word + ' '
尽管您可以通过以下方法简化:
translations += deu2eng.get(word.lower(), word) + ' '
阅读python文档也很好,这里有一些您正在寻找的参考:
dict
split