Задание 8 КЕГЭ: считаю слова через product, но получаю больше, чем в ответе — где лишнее?
Задание 8 на число слов из букв с ограничениями (например, слова длины 5 из О, К, Н, в которых не две гласные подряд). Перебираю через itertools.product, но мой ответ больше правильного. Видимо, я не отсекаю запрещённые слова. Как правильно фильтровать?
2 ответа
product даёт ВСЕ комбинации, включая запрещённые — их надо отфильтровать условием. Шаблон задания 8:
from itertools import product
bukvy = 'ОКН'
gласные = set('О')
cnt = 0
for w in product(bukvy, repeat=5):
# проверяем условие: нет двух гласных подряд
ok = True
for i in range(len(w) - 1):
if w[i] in гласные and w[i+1] in гласные:
ok = False
break
if ok:
cnt += 1
print(cnt)
Твоя ошибка скорее всего в том, что ты считаешь все слова или фильтр написан неправильно. Проверь:
- правильно ли определены гласные/согласные;
- условие "не две подряд" — это пара соседних
w[i]иw[i+1]; - учёл ли ты, могут ли буквы повторяться (если "все буквы разные" — нужен другой фильтр через
len(set(w)) == 5).
Выведи для отладки несколько отбракованных слов и убедись, что они действительно запрещены.
Частая причина "перебора": в условии было "первая буква — согласная" или "слово не начинается с гласной", а ты это не закодировал. Перечитай условие и добавь все ограничения в if. Каждое словесное ограничение = отдельная проверка в фильтре. Лучше написать несколько мелких if ... : ok = False, чем одно длинное условие, в котором легко ошибиться.