← Все вопросы

Задание 8 КЕГЭ: считаю слова через product, но получаю больше, чем в ответе — где лишнее?

Задан 28 месяцев назад1.4к просмотров2 ответа
6

Задание 8 на число слов из букв с ограничениями (например, слова длины 5 из О, К, Н, в которых не две гласные подряд). Перебираю через itertools.product, но мой ответ больше правильного. Видимо, я не отсекаю запрещённые слова. Как правильно фильтровать?

2 ответа

12
✓ Принятый ответ — помог автору

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)

Твоя ошибка скорее всего в том, что ты считаешь все слова или фильтр написан неправильно. Проверь:

  1. правильно ли определены гласные/согласные;
  2. условие "не две подряд" — это пара соседних w[i] и w[i+1];
  3. учёл ли ты, могут ли буквы повторяться (если "все буквы разные" — нужен другой фильтр через len(set(w)) == 5).

Выведи для отладки несколько отбракованных слов и убедись, что они действительно запрещены.

4

Частая причина "перебора": в условии было "первая буква — согласная" или "слово не начинается с гласной", а ты это не закодировал. Перечитай условие и добавь все ограничения в if. Каждое словесное ограничение = отдельная проверка в фильтре. Лучше написать несколько мелких if ... : ok = False, чем одно длинное условие, в котором легко ошибиться.

Ваш ответ

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