Exercism: determine if a word or phrase is an isogram The task:

Determine if a word or phrase is an isogram.
An isogram (also known as a &quot;nonpattern word&quot;) is a word or phrase without a repeating letter, however spaces and hyphens are allowed to appear multiple times.

Examples of isograms:

lumberjacks
background
downstream
six-year-old

The word isograms, however, is not an isogram, because the s repeats.
Even though I'm aware that questions about isograms have already been posted, in this variation of the problem spaces and hyphens are allowed to appear multiple times so that you can not use a solution such as len(string) == len(set(string))
What bothers me about my solution is hardcoding bounds of ascii character ranges and using collections library for such a small problem. I'm wondering if there is a better way to do it.
Here is my code:
from collections import Counter

ASCII_LOWER_BOUND = 97
ASCII_UPPER_BOUND = 123

def is_isogram(string):
    char_counts = Counter(string.lower())
    return all(
        char_counts[char] == 1 
        for char in char_counts 
        if ord(char) in range(ASCII_LOWER_BOUND, ASCII_UPPER_BOUND + 1)
        )

And a test suite provided by exercism:
import unittest

from isogram import is_isogram

# Tests adapted from `problem-specifications//canonical-data.json` @ v1.7.0


class IsogramTest(unittest.TestCase):
    def test_empty_string(self):
        self.assertIs(is_isogram(&quot;&quot;), True)

    def test_isogram_with_only_lower_case_characters(self):
        self.assertIs(is_isogram(&quot;isogram&quot;), True)

    def test_word_with_one_duplicated_character(self):
        self.assertIs(is_isogram(&quot;eleven&quot;), False)

    def test_word_with_one_duplicated_character_from_the_end_of_the_alphabet(self):
        self.assertIs(is_isogram(&quot;zzyzx&quot;), False)

    def test_longest_reported_english_isogram(self):
        self.assertIs(is_isogram(&quot;subdermatoglyphic&quot;), True)

    def test_word_with_duplicated_character_in_mixed_case(self):
        self.assertIs(is_isogram(&quot;Alphabet&quot;), False)

    def test_word_with_duplicated_character_in_mixed_case_lowercase_first(self):
        self.assertIs(is_isogram(&quot;alphAbet&quot;), False)

    def test_hypothetical_isogrammic_word_with_hyphen(self):
        self.assertIs(is_isogram(&quot;thumbscrew-japingly&quot;), True)

    def test_hypothetical_word_with_duplicated_character_following_hyphen(self):
        self.assertIs(is_isogram(&quot;thumbscrew-jappingly&quot;), False)

    def test_isogram_with_duplicated_hyphen(self):
        self.assertIs(is_isogram(&quot;six-year-old&quot;), True)

    def test_made_up_name_that_is_an_isogram(self):
        self.assertIs(is_isogram(&quot;Emily Jung Schwartzkopf&quot;), True)

    def test_duplicated_character_in_the_middle(self):
        self.assertIs(is_isogram(&quot;accentor&quot;), False)

    def test_same_first_and_last_characters(self):
        self.assertIs(is_isogram(&quot;angola&quot;), False)


if __name__ == &quot;__main__&quot;:
    unittest.main()
```
You can iterate once over text and short-circuit right away if any character is not unique.
import string


def is_isogram(text):
    seen = set()
    for char in text:
        if (lower := char.lower()) in string.ascii_lowercase:
            if lower in seen:
                return False
            else: 
                seen.add(lower)
    return True