Задание: пользователь должен ввести с клавиатуры произвольный текст, который должен сначала отсортироваться по алфавиту (каждое слово по алфавиту), а затем каждое слово должно быть остортировано по длине. Результаты должны быть выведены на экран.
Версия Python 3.5
Когда читаешь документацию или смотришь уроки по Питону, всё предельно ясно и просто. А вот когда приходит время для практических заданий, оказывается всё не так просто, как казалось ранее. По данной задаче были попытки найти простое и понятное решение в гугле по запросам "сортировка строк python", "сортировка кортежа python" (были предположения перевести слова в кортеж), "слова по алфавиту в тексте python", "отсортировать текст по алфавиту python", "сортировка по алфавиту python", "перевести строку в список" и даже "перевести список в строку". В результате моих мучений и помощи со стороны были реализованы простые решения данной задачи.
Вывод на экран введённого текста.
Для начала определим переменную, которая будет записывать и выводить затем введённый пользователем произвольный текст. Затем выведем на экран значение переменной при помощи оператора вывода print. Здесь всё просто.
text=str(input("Enter text: ")) print(text)
Сортировка символов в списке по алфавиту.
При помощи функции sorted() отсортируем по алфавиту но не каждое слово, а каждый символ. В задаче этого не было, но на всякий случай оставлю и этот вариант здесь. Чтобы функция работала, создаём новую переменную, в которую складываем все символы отдельно и затем выводим их по алфавиту.
newList = sorted(text) print(newList) #Выведется в списке отсортированный по алфавиту каждый символ в тексте
Сортировка списка из слов по алфавиту.
Преобразование строки в список слов можно выполнить при помощи функции split() по формуле (синтаксису): S(или любая другая переменная).split(символ). То есть, происходит по сути разбиение строки по определённому разделителю, в данном случае — по пробелу. Правда, по такому коду отсортируются слова по алфавиту именно в списке (с полным синтаксисом списков: квадратными скобками и заключение каждого слова в кавычки). Немного не то опять, что нам хотелось бы получить в решении задания.
n=sorted(text.split()) print(n) #Выведется в списке отсортированные по алфавиту слова, что были в ведённом пользователем тексте
Сортировка слов в строке по алфавиту.
А вот код ниже с использованием той же функции split() и цикла путём итерирования слов в тексте будут выведены на экран отсортированные по алфавиту введённые пользователем слова текста. А чтобы при итерации каждое слово не было с новой строки (как по умолчанию), дополнительно введём переменную e, с помощью которой слова будут выведены в одну строку, а не в столбик.
w=text.split() e="" for r in sorted(w): e=e+" " +r print(e) #Выведется в строке сортировка слов из введённого пользователем текста по алфавиту
Сортировка слов по длине.
Пришло время отсортировать слова в тексте по их длине. Здесь также используем split() для разделения слов в тексте. Теперь нужно отсортировать слова по длине. Для этого нужно создать анонимную функцию (содержащую лишь одно выражение определения длины слова) при помощи инструкции lambda.
l = text.split() q="" for i in sorted(l,key=lambda a: len(a)): q = q + " " + i print(q) #Выведется в строке отсортированные в порядке возрастания количества символов слова из введённого пользователем текста
Успехов в учёбе!