Поиск однокоренных слов в списке через функцию, цикл и условие
возникла проблема с заданием, не могу понять, где ошибка. Задача звучит так:
- Объявите функцию single_root_words и напишите в ней параметры root_world и *other_words.
- Создайте внутри функции пустой список same_words, который пополнится нужными словами.
- При помощи цикла for переберите предполагаемо подходящие слова.
- Пропишите корректное относительно задачи условие, при котором добавляются слова в результирующий список same_words.
- После цикла верните образованный функцией список same_words.
- Вызовите функцию 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 шт):
Для выполнения задачи необязательно использовать модуль 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']
Функция 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()]