Malodar
@Malodar
Начинающий питонист

Как разбить список слов по категориям?

день добрый всем! решаю одну задачку - делаю вариацию на игру "угадай слово" (человек указывает какой длины должно быть слово, комп формирует список слов заданной длины из всего массива слов в txt файле и выбирает рандомно слово из этого списка; человек угадывает по буквам это слово за N-е количество раз). Застопорился на одной проблеме. В задании есть такой пункт:
- после того, как пользователь вводит предполагаемую букву, вам нужно разбить слова из списка на категории.
Категории формируются вот по такому принципу:
047b3b4e8cb0400ab14abfccfd137ad4.png
т.е. если есть на входе есть список, например если загадано слово из 4 букв и из всего списка слов вот эти слова имеют длину в 4 буквы: ALLY BETA COOL DEAL ELSE FLEW GOOD HOPE IBEX и пользователь загадал букву E, то на выходе мне нужно получить словарь:
{"----": ["ALLY", "COOL" , "GOOD"],
"-E--": ["BETA", "DEAL"],
"--E-": ["FLEW", "IBEX"],
"E--E": ["ELSE"],
"---E": ["HOPE"],
}
Может кто подскажет алгоритм, как получать такой словарь? Причем длина слова может варьироваться от 2 до 8 букв...
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
Malodar
@Malodar Автор вопроса
Начинающий питонист
сам нашел решение. может кривовато написано, но зато работает :) :
word_list = ["ALLY", "BETA", "COOL", "DEAL", "ELSE", "FLEW", "GOOD", "HOPE", "IBEX"]
guess = "E"

keys = []

def get_template(word, guess):
    template = "".join(c if c in guess else "-" for c in word)
    return template

for word in word_list:
    template = "".join(c if c in guess else "-" for c in word)
    if template not in keys:
        keys.append(template)
categories = {}.fromkeys([key for key in keys])
for key in categories:
    categories[key] = []
    for word in word_list:
        if get_template(word, guess) == key:
            categories[key].append(word)

print(categories)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы