Давайте разберёмся, как написать функцию prediction(), которая будет выполнять описанные условия. Мы будем использовать Python для этого.
Задача
Ваша задача — написать функцию, которая принимает произвольное количество строк и возвращает словарь. Ключами этого словаря будут длины строк, а значениями — списки подходящих строк, которые будут отфильтрованы по заданным условиям.
Условия
- Длину строки нужно фильтровать по значению аргумента
factor. Если аргумент не указан, по умолчанию он равен 2. - Если передан аргумент
letter, то строки не должны начинаться с буквы, указанной в значенииletter(без учета регистра). - Если передан аргумент
func, то список возвращаемых строк должен быть отсортирован с использованием функции, указанной вfunc.
Шаги по реализации:
- Пройдёмся по всем строкам (аргументам), чтобы отфильтровать их по длине, кратной значению
factor. - Если аргумент
letterпередан, проверим, начинается ли строка с этой буквы. Если да, то строка откидывается. - Сохраним подходящие строки в словаре, в зависимости от их длины.
- Если передан
func, отсортируем списки строк перед их добавлением в словарь.
Примерный код
def prediction(*args, **kwargs):
factor = kwargs.get('factor', 2)
letter = kwargs.get('letter')
func = kwargs.get('func')
results = {}
for string in args:
length = len(string)
# Проверка на кратность длины
if length % factor != 0:
continue
# Проверка на начало строки
if letter and string.lower().startswith(letter.lower()):
continue
# Добавляем строку в результаты
if length not in results:
results[length] = []
results[length].append(string)
# Сортируем результаты, если функция предоставлена
for length in results:
if func:
results[length] = sorted(results[length], key=func)
else:
results[length] = sorted(results[length]) # Сортируем по умолчанию
return results
# Пример использования функции
args1 = [
'Tea', 'predict', 'future', 'voice',
'sounded', 'calm', 'Everyone', 'knows', 'that',
'Except', 'for', 'the', 'tea', 'leaves', 'themselves'
]
kwargs1 = {
'letter': 't'
}
print(prediction(*args1, **kwargs1))
args2 = [
'You', 'have', 'completely', 'imbecile',
'try', 'argue', 'with', 'Tea', 'leaves'
]
kwargs2 = {
'factor': 3,
'func': str.lower
}
print(prediction(*args2, **kwargs2))
Объяснение работы функции:
- Сбор параметров: Мы извлекаем
factor,letterиfuncиз именованных аргументов. - Итерация по строкам: Для каждой строки мы сначала проверяем, соответствует ли длина критериям (кратность
factor). - Фильтрация по букве: Если задана буква, проверяем первую букву строки. Если она совпадает, строка игнорируется.
- Формирование словаря результатов: Мы добавляем соответствующие строки в словарь по длине. Если длин строк нет в словаре, создаём новый список.
- Сортировка: Если предоставлена функция сортировки, применяем её ко всем спискам.
- Возврат результата: В конце возвращаем готовый словарь.
Эта реализация учитывает все условия задачи и должна работать с примерами, которые вы предоставили.