pythonpangram

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

My code is failing to return True in every case it should.

I am using mentored mode on exercism.io, but the python track is oversubscribed and only provides feedback on the major exercises.

I'm hoping a python wizard here can point me towards my errors. Thanks much....


Solution

  • The task is to check if the sentence contains all letters of the alphabet. So while you can determine that is not the case (i.e. return false) when you find the first letter that is not in the sentence, you cannot state the opposite (i.e. return true) until you have checked all the letters.

    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
    

    Addendum: There is also the python-only, little known and seldom used for/else language feature see docs: for loops may have an else clause which is called when the loop exits "normally" (i.e. with out stopping early due to a break, return or exception). This makes the following code a viable alternative. Note the different indentation of the else clause when compared with the OP code.

    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