Как отсортировать числа в алфавитном порядке их текстовых названий?
Программа выписала названия всех целых чисел от 0 до 20 и расположила их в алфавитном порядке:
numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty']
number_dict = {number: index for index, number in enumerate(numbers)}
# Создаём список чисел, отсортированных по алфавиту их названий
sorted_numbers = [number_dict[key] for key in sorted(number_dict.keys())]
# Выводим числа в одну строку, разделённые пробелом
print(' '.join(map(str, sorted_numbers)))
Вывод программы: 8 18 11 15 5 4 14 9 19 1 7 17 6 16 10 13 3 12 20 2 0.
Как переписать данную программу таким образом, чтобы избежать написания названий чисел вручную? Ведь написать 20 чисел (точнее, 21) не так уж и трудно, ну а если бы их было 100 или 1000?
Ответы (1 шт):
Автор решения: Acinit
→ Ссылка
Можно попробовать вот так
# импортируем библиотеку перевода числа в слово
from num2words import num2words as n2w
# импортируем библиотеку перевода слова в числа
# работает только с английскийм языком
from words2num import w2n
# создаем последовательность от 0 до 20 сразу переводя в текст
lst = [n2w(x) for x in range(21)]
# сортируем
lst.sort()
# проходим по элементам списка и сортируем их обратно в число
for x in range(len(lst)):
lst[x]=str(w2n(lst[x]))
# выводим
print(' '.join(lst))
Вывод:
8 18 11 15 5 4 14 9 19 1 7 17 6 16 10 13 3 12 20 2 0
Можем изменить код так, чтобы это все вышло в качестве функции, принимающая последовательность чисел (обработки писать не буду, просто дам как пример):
from num2words import num2words as n2w
from words2num import w2n
def NumberToWordsSort(x):
for i in range(len(x)):
x[i]=n2w(x[i])
x.sort()
for i in range(len(x)):
x[i]=str(w2n(x[i]))
return x
print(' '.join(NumberToWordsSort([x for x in range(21)])))