Поиск однокоренных слов в списке через функцию, цикл и условие

возникла проблема с заданием, не могу понять, где ошибка. Задача звучит так:

  1. Объявите функцию single_root_words и напишите в ней параметры root_world и *other_words.
  2. Создайте внутри функции пустой список same_words, который пополнится нужными словами.
  3. При помощи цикла for переберите предполагаемо подходящие слова.
  4. Пропишите корректное относительно задачи условие, при котором добавляются слова в результирующий список same_words.
  5. После цикла верните образованный функцией список same_words.
  6. Вызовите функцию single_root_words и выведете на экран(консоль) возвращённое ей занчение.
import re


def single_root_words(root_word, *other_words):
    same_words = []
    for i in other_words:
        if i in other_words:
            re.search(root_word, i)
            same_words.append(i)

    return same_words
result = single_root_words('rich', 'richiest', 'orichalcum', 'cheers', 'richies')
print(result)
result2 = single_root_words('Disablement', 'Able', 'Mable', 'Disable', 'Bagel')
print(result2)

Ответы (2 шт):

Автор решения: Ben Puls

Для выполнения задачи необязательно использовать модуль re.

Создаём функцию single_root_words(root_word, *other_words). Внутри создаём список (по условию задачи). Далее через цикл for перебираем слова на предмет наличия одинакового корня, для этого можно воспользоваться строковым методом, который вернёт нам True, если слово начинается с указанного префикса. И это метод - startswith(). Затем однокоренные слова помещаем в массив и возвращаем его.

def single_root_words(root_word, *other_words):
    same_words = []
    for word in other_words:
        if root_word.startswith(word) or word.startswith(root_word):
            same_words.append(word)
    return same_words


print(single_root_words('rich', 'richiest', 'orichalcum', 'cheers', 'richies')) 
# ['richiest', 'richies']


print(single_root_words('Disablement', 'Able', 'Mable', 'Disable', 'Bagel'))
# ['Disable']

→ Ссылка
Автор решения: Stanislav Volodarskiy

Функция cognets принимает корень слова первым аргументов и слова-кандидаты в остальных аргументах. Слово считается однокоренным если оно содержит корень в себе как подстроку. И корень и слова приводятся к нижнему регистру:

def cognets(root, *words):
    cognets = []
    for w in words:
        if root.lower() in w.lower():
            cognets.append(w)

    return cognets


print(cognets('rich', 'richiest', 'orichalcum', 'cheers', 'richies'))
print(cognets('Disablement', 'Able', 'Mable', 'Disable', 'Bagel'))
$ python cognets.py
['richiest', 'orichalcum', 'richies']
[]

cognets имеет смысл переписать в виде списочного выражения. Питонисты такое любят:

def cognets(root, *words):
    return [w for w in words if root.lower() in w.lower()]
→ Ссылка