'Function to see if word is isogram

An isogram is a word that has no repeating letters, consecutive or non-consecutive. Implement a function that determines whether a string that contains only letters is an isogram. Assume the empty string is an isogram. Ignore letter case.

I have the following as the furthest I can make it. But the goal is trying to say that 'moOse' is not an isogram. It says to not worry about casing. I am not sure how to differentiate between 'o' and 'O'.

    char_list = []
    for char in string:
        if char.isalpha():
            if char.islower():
                if char in char_list:
                    return False
                else:
                    char_list.append(char)
    return True

My script returns true because it sees the 'o' and 'O' differently. How do I get it to not differentiate? I tried adding .islower(), but it doesn't seem to work.



Solution 1:[1]

You can just uppercase the string before checking whether it contains duplicate letters:

def is_isogram(string):
    char_list = []
    for char in string.upper():
        if char in char_list:
            return False
        char_list.append(char)
    return True

You can make this faster by using a set rather than a list:

def is_isogram(string):
    char_list = set()
    for char in string.upper():
        if char in char_list:
            return False
        char_list.add(char)
    return True

And you can make this even more concise by using the len() function:

def is_isogram(string):
    return len(string) == len(set(string.upper()))

Solution 2:[2]

Short and straightforward solution:

def check_isogram(text):
 return len(set(text.lower())) == len(text)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BrokenBenchmark
Solution 2