Пять дней летел уже Нильс с дикими гусями. В общем, птичья жизнь была ему по душе: уроков учить не надо, гусей пасти не надо, хворост таскать не надо. Летишь себе и летишь! Синему небу конца-края нет, воздух лёгкий, прохладный, будто в чистой воде в нём купаешься. А земля внизу вся как на ладони. Только и дела – гляди по сторонам. Всё само так и бежит тебе навстречу – и горы, и реки, и города, и деревни. Надоест смотреть вниз, можно смотреть вверх. Это тоже интересно. Облака точно взапуски гонятся за стаей: то догонят её, то отстанут, а то вдруг собьются в кучу и снова разбегутся, как барашки по полю.
Напишите функцию joys_of_flying(), которая будет подводить промежуточные итоги – где интересней – снизу или сверху.
А делать надо вот что.
Каждая строка слов через пробел разделена на две части, каждая часть заключена в квадратные скобки. Нужно в каждой части взять первое слово после сортировки по алфавиту и получить из этих двух слов набор используемых в них букв без повторений.
Функция принимает произвольное число позиционных аргументов-строк и произвольное число именованных параметров.
Если именованные параметры не переданы, то функция просто возвращает список кортежей, в которых из каждой строки получены значения: (суммарное количество букв в словах двух частей строки, полученная по описанному правилу строка).
Если передан именованный аргумент right_order и он имеет значение True, то кортежи в списке должны быть отсортированы. Если значение False, то сортировка в обратном порядке.
Если передан именованный аргумент index, то брать нужно не первое слово из части строки после сортировки по алфавиту, а слово с индексом, равным значению аргумента index.
Ввод
data = ['[for five days Nils flew][with wild geese]', '[lessons do not need to learn][the geese graze it is not necessary]', '[no need to carry firewood][fly yourself and fly]', '[there is no end to the blue sky][the air is light and cool]']
print(*joys_of_flying(*data), sep="\n")
вывод
(32, 'ieglNs')
(52, 'edgso')
(38, 'ncdrya')
(44, 'eilurba')
Python
Задача python срочно нужно помочь решить
Попробуй это:
---------------------
Описание.
Для каждой группы:
Бьём регулярками строку, 1-я группа матча будет первой частью внутри квадратных скобок, 2-я - второй (индексация с единицы). Сохраняем их в переменной parts. Если будут ещё части (три и более), они будут проигнорированы.
Считаем количество символов, кроме пробелов, сохраняем его в total. Здесь можно пойти и таким путём:
Дальше бьём каждую часть по словам, сортируем её по возрастанию, берём из неё слово с индексом index (индексация с нуля), складываем все буквы в множество, объединяем множества обеих частей и склеиваем итоговое множество в строку (chosen). В условии ничего не сказано о порядке уникальных букв внутри этой строки, и у меня порядок отличается от того, что в тестовом примере, но набор букв - тот же.
В кортеже возвращаем кол-во символов и строку.
Описанную логику применяем к каждому аргументу функции и возвращаем кортежи в порядке исходных строк либо в порядке, указанном в right_order.
Нехватка частей в квадратных скобках (например, одна вместо двух) или слов до аргумента index (например, передали 3, а слов всего 3) приведёт к выборсу исключения. Это чтоб без сюрпризов.
from re import match
from functools import partial, reduce
from operator import itemgetter
from itertools import filterfalse
def joys_of_flying(*ss, right_order = None, index = 0):
def process(s):
toset = lambda p: reduce(set.__or__, map(set, p), set())
parts = list(map(match(r"\[([^]]*)\][^]]*\[([^]]*)\]", s).group, range(1, 3)))
total = sum(map(sum, map(partial(map, ' '.__ne__), parts)))
chosen = ''.join(reduce(set.__or__, map(set, map(itemgetter(index), map(sorted, map(str.split, parts)))), set()))
return (total, chosen)
r = list(map(process, ss))
return r if right_order is None else sorted(r, reverse = not right_order)
---------------------
Описание.
Для каждой группы:
Бьём регулярками строку, 1-я группа матча будет первой частью внутри квадратных скобок, 2-я - второй (индексация с единицы). Сохраняем их в переменной parts. Если будут ещё части (три и более), они будут проигнорированы.
Считаем количество символов, кроме пробелов, сохраняем его в total. Здесь можно пойти и таким путём:
total = sum(map(sum, map(partial(map, str.isalpha), parts)))
Тогда будут подсчитываться только буквы, как сказано в задании. Разницу увидишь, только если в строке будет что-то ещё, кроме букв, пробелов и сбалансированных квадратных скобок.Дальше бьём каждую часть по словам, сортируем её по возрастанию, берём из неё слово с индексом index (индексация с нуля), складываем все буквы в множество, объединяем множества обеих частей и склеиваем итоговое множество в строку (chosen). В условии ничего не сказано о порядке уникальных букв внутри этой строки, и у меня порядок отличается от того, что в тестовом примере, но набор букв - тот же.
В кортеже возвращаем кол-во символов и строку.
Описанную логику применяем к каждому аргументу функции и возвращаем кортежи в порядке исходных строк либо в порядке, указанном в right_order.
Нехватка частей в квадратных скобках (например, одна вместо двух) или слов до аргумента index (например, передали 3, а слов всего 3) приведёт к выборсу исключения. Это чтоб без сюрпризов.
Похожие вопросы
- Помогите решить задачу Python,очень нужно
- Задача Python! Срочно! Задача: Каждому минимуму свой максимум!
- Питон. Нужно помочь решить задачу с циклом for
- Помогите, пожалуйста, решить задачу Python
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Задача в Python? Помогите решить, не получается! Решить нужно без функций и методов. Только циклы и условные операторы.
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Помогите решить задачу в яндекс-практикуме Python
- Помогите решить задачу на python!