#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. или без сортировки
ord(max(string)) - ord(min(string))
2. Да! Только не забудьте удалить не-альфа-символы и перевести все в нижний / верхний.
3. Вместо преобразования в a
set
вы можете изменить первую строку на set-comp вместо list-comp (просто измените[]
на{}
)