Как вернуть наибольшее расстояние между любыми двумя буквами (a-z игнорирование регистра)?

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь вернуть функцию, которая принимает строку в качестве входных данных и возвращает наибольшее расстояние между любыми двумя буквами (a-z игнорируя регистр). Расстояние в этом случае означает количество букв в алфавите. Например, расстояние между «a» и «b» равно 1. Должен ли я использовать string.index или chr и ord ?

Мой код до сих пор:

 def biggest_letter_distance(string):
    dist = [chr(i) for i in range(ord('a'),ord('z') 1)]
    return dist    
  

На чем я пытаюсь протестировать:

 assert(biggest_letter_distance("Hello World") == 19)
assert(biggest_letter_distance("!!") == -1)
  

Комментарии:

1. Вы могли бы сначала поискать букву min и max .

Ответ №1:

 def biggest_letter_distance(string):
    string = [char.lower() for char in string if char.isalpha()]
    if not string:
        return -1
    letters = sorted(set(string))
    return ord(letters[-1]) - ord(letters[0])
  

Объяснение:

  1. Выбирает только буквенные символы и переводит их в нижний регистр.
  2. Упорядочивает выделение
  3. Возвращает расстояние между первым и последним элементами

Комментарии:

1. или без сортировки ord(max(string)) - ord(min(string))

2. Да! Только не забудьте удалить не-альфа-символы и перевести все в нижний / верхний.

3. Вместо преобразования в a set вы можете изменить первую строку на set-comp вместо list-comp (просто измените [] на {} )