来自 exorcism.io、python track 的 pangram 问题,为什么我的解决方案不起作用?

pangram problem from exorcism.io, python track, why doesn't my solution work?

def is_pangram(sentence):
    alf = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    sentence = sentence.lower()
    for x in alf:
        if x not in sentence:
            return False
        else:
            return True

我的代码未能return在每种情况下都应该是正确的。

我在 exercism.io 上使用指导模式,但是 python 轨道被超额订阅并且只提供对主要练习的反馈。

我希望这里的 python 向导可以指出我的错误。非常感谢....

任务是检查句子是否包含所有个字母。因此,当您发现 第一个 字母不在句子中时,您可以确定 不是 情况(即 return false) , 在检查完 all 个字母之前,你不能说相反的(即 return true)。

def is_pangram(sentence):
    alf = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    sentence = sentence.lower()
    for x in alf:
        if x not in sentence:
            return False
    return True

附录: 还有 python-only,鲜为人知且很少使用的 for/else 语言特性 see docsfor 循环可能有一个 else 子句,当循环退出 "normally"(即没有由于 breakreturn 或异常而提前停止)。这使得以下代码成为可行的替代方案。与 OP 代码相比,请注意 else 子句的不同缩进。

def is_pangram(sentence):
    alf = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    sentence = sentence.lower()
    for x in alf:
        if x not in sentence:
            return False
    else:
        return True