python`else`无法按预期工作

2024-10-01 13:34:11 发布

您现在位置:Python中文网/ 问答频道 /正文

def greet(language):
    database = {'english': 'Welcome',
                'czech': 'Vitejte',
                'danish': 'Velkomst',
                'welsh': 'Croeso'}
    for k, v in database.items():
        if language == k:
            return v
        # else: return('Welcome')

print(greet('czech'))
> Vitejte

如果我取消注释else: return('Welcome')(如果问候语不在列表中),我希望收到“Welcome”,但无论我输入的是现有的还是不存在的语言,它都会返回“Welcome”。你知道吗

我也试过elif language =!= k,但它似乎以同样的方式工作


Tags: forreturnenglishdeflanguagedatabaseelsewelcome
3条回答

你想要这个:

def greet(language):
    database = {'english': 'Welcome',
                'czech': 'Vitejte',
                'danish': 'Velkomst',
                'welsh': 'Croeso'}
    for k, v in database.items():
        if language == k:
            return v

    # Return this only if none of the items matched.
    return('Welcome')

正如您的代码目前所处的状态,它只检查字典中的第一项。如果该键匹配,则返回适当的值。否则,它将返回“欢迎”,但它永远不会转到第二项。你知道吗

在我的代码中,它检查所有项,并在找到匹配项后立即返回正确的值。只有在找不到匹配项时,才会返回“欢迎”

顺便说一句,这是一个更简单的代码版本:

def greet(language):
    database = {'english': 'Welcome',
                'czech': 'Vitejte',
                'danish': 'Velkomst',
                'welsh': 'Croeso'}
    return database.get(language, 'Welcome')

^{}允许您执行字典查找,如果找不到项,则使用默认值。你知道吗

这基本上是简写的(但是dict.get是首选):

if language in database:
    return database[language]
else:
    return 'Welcome'

像这样看,for循环将枚举项目。你知道吗

假设.items()获取的第一项是'english': 'Welcome'。现在,如果语言是而不是英语,那么if将失败,因此执行else部分,并返回'Welcome'。只有当枚举的第一项确实是正确的语言时,程序才会返回该值。你知道吗

然而,如果您使事情变得太复杂,您可以将dict.get(..)回退值一起使用

def greet(language):
    database = {'english': 'Welcome',
                'czech': 'Vitejte',
                'danish': 'Velkomst',
                'welsh': 'Croeso'}
    return database.get(language,'Welcome')

这也将提高性能:您的原始程序具有O(n)时间复杂度,而字典的平均查找时间是O(1)时间。你知道吗

这是因为在到else的第一个分支中执行的return语句从for劫持控件,退出函数。例如,您可以将else作为for的一部分移动;指示'Welcome'只应在for完全耗尽时返回:

...
for k, v in database.items():
    if language == k:
        return v
else: 
    return 'Welcome'

或者使用字典的get方法返回默认值:

...
return database.get(lang, 'Welcome')

相关问题 更多 >