Python: выводим слова введённой строки, отсортированные по длине
Словами будем считать последовательности букв, разделённых пробелами. Знаки препинания не являются частью слова.
ПРИМЕР: если мы ввели строку
Моя головная боль: математика, физика, информатика.
программа должна вывести:
Моя боль физика головная математика информатика
1. Вводим строку:
s = input()
2. Чтобы разбить строку на элементы, используем метод .split(), причём без аргумента, потому что разбивать будем по пробелу.
wrds = s.split()
Переменная wrds теперь — это список строк. Каждая строка — слово, причём со знаком препинания в конце, если он там был. Например, «физика, „.
3. Давайте удалим последний символ каждой подстроки, если это знак препинания. Конечно, мы могли бы сделать это «в лоб»:
# для всех подстрок списка for i in range(len(wrds)): # если последний символ — знак препинания if wrds[i][-1] in '.,: ; -?! ': # заменяем строку на неё без последнего символа # (фактически ДО последнего символа) wrds[i] = wrds[i][: -1]
Но во-первых, а вдруг там будет случайно затесавшаяся цифра или мы не все знаки препинания вспомнили (вот скобки, например, ещё могут быть).
А во-вторых, знак может быть и в начале слова — та же скобка.
Используем метод .isalpha(), который возвращает True, если аргумент состоит только из букв. И будем проверять с обоих концов слова:
for i in range(len(wrds)): if not(wrds[i][0].isalpha()): wrds[i] = wrds[i][1:] if not(wrds[i][-1].isalpha()): wrds[i] = wrds[i][: -1]
4. Теперь бы надо отсортировать список строк. Но если мы будем делать это запросто:
wrds.sort()
получим (естественно!) сортировку по алфавиту, а это не то, что нам нужно.
Вспомним, что у метода .sort() есть параметр key, позволяющий сортировать элементы списка как угодно: хоть по второму символу строк, хоть по остатку от деления чисел на 11.
Причём мы можем функцию-ключ сортировки сделать отдельной функцией, вот так:
def key_func(x): return len(x)
А можем использовать лямбда-функцию прямо в вызове метода.
Лямбда-функции (напомню) — это крохотные функции без имени, которые реализуются прямо там, где используются.
Наша сортировка по длинам строк будет выглядеть так:
wrds.sort(key=lambda x: len(x))
Параметр лямбда-функции х — это элемент списка, для которого вызывается .sort(). То есть в нашем случае — строка.
Что возвращает функция-ключ сортировки — по тому и сортируем. Здесь — по длине строк.
5. Осталось вывести наши строки. Можно, конечно, сделать это попросту:
for x in wrds: print(x)
А можно использовать чуть более мудрёный, но краткий функциональный подход и записать так:
[print(x) for x in wrds]
Результат получим один и тот же!
Осталось переписать программу полностью и можно 💥 сдавать лабу 😉
Код программы:
s = input() # разбиваем строку на слова wrds = s.split() # для всех подстрок списка for i in range(len(wrds)): # если последний символ - знак препинания if wrds[i][-1] in '.,:;-?!': # заменяем строку на неё без последнего символа # (фактически ДО последнего символа) wrds[i] = wrds[i][:-1] # удаляем начальные и конечные знаки # препинания из каждого слова for i in range(len(wrds)): if not(wrds[i][0].isalpha()): wrds[i] = wrds[i][1:] if not(wrds[i][-1].isalpha()): wrds[i] = wrds[i][:-1] # сортируем список по длинам строк wrds.sort(key=lambda x: len(x)) # выводим по одному слову на строке [print(x) for x in wrds]
Или можете скачать готовым файликом 🔽🔽🔽
0 комментариев