Задание 2 ЕГЭ: таблицы истинности

11 класс, углублённый уровень. Практикум по программному методу: permutations перебирает расстановки, index находит столбец каждой переменной.

Что нужно сделать
Шесть задач, по одной на тип, и все сразу на странице — решай в любом порядке. Первые четыре — про то, как метод устроен: их считают в голове. Последние две — задания 2 в том виде, как на ЕГЭ, они решаются программой: одно с пятью пропусками в таблице, одно с семью.
Баллы
По баллу за задачу, всего 6: шесть — «5», пять — «4», четыре — «3». Оценивание жёсткое: на «5» надо решить всё.
Ошибся — не страшно
Разбор появится сразу, а кнопка «Новые числа» даст задачу того же типа с другими данными: балл можно доработать. Отдельно видно, сколько задач сделано с первой попытки.
Ответ
Буквы — подряд, латиницей, без пробелов и запятых: zxwy. Числа — целые, без пояснений. Сверка знак в знак, как на КЕГЭ.
Программу набери сам
Шаблон ниже — картинка, и это нарочно: пока не наберёшь его руками хотя бы раз, метод не станет твоим. Дальше меняешь только table и строку с F.
Шаблон решения с пропусками — набери его в IDLE Шаблон решения задания 2 с пропусками — набери его сам

Пропусков может быть и семь: тогда a1…a7 и repeat=7. Три переменные — 'xyz', три строки с index и row[3].

Задачи

баллов 0 из 6, это2

Подсказка: как решать задание 2 программой

Логика на языке Python

в условиичитаетсяв программе
¬Aне Anot A
A ∧ BA и BA and B
A ∨ BA или BA or B
A → Bиз A следует BA <= B
A ≡ BA равносильно BA == B

Порядок действий в условии: сначала ¬, потом ∧, потом ∨, потом →, последней ≡. Скобок в условии ровно столько, сколько нужно: в x ≡ y ∨ y сначала ∨, а в ¬(w → x) отрицание относится ко всей скобке. В Python скобки ставить везде: not x <= y он читает как not (x <= y), а x <= y == z — как цепочку сравнений.

Что делает программа

Строка таблицы переписывается с листа как есть, вместе с F: (0, 0, 1, 1, 1) — четыре значения и пятым F. Расстановка p — строка букв в порядке столбцов, как в задании 1: 'zwxy' значит «в первом столбце z, во втором w…».

for p in permutations('xyzw'):
    p = ''.join(p)
    ok = True
    for row in table:
        x = row[p.index('x')]
        ...
        F = выражение
        if F != row[4]:
            ok = False
    if ok:
        print(p)

Четыре строки с index — по одной на переменную. После них выражение F пишется прямо, как в условии: никаких def. Те же четыре строки можно записать одной:

x, y, z, w = [row[p.index(v)] for v in 'xyzw']

Справа список из четырёх значений, по одному на букву, слева он распаковывается в четыре переменные. Порядок букв в 'xyzw' и имён слева обязан совпадать.

Если в таблице есть пропуски

for a1, a2, a3 in product([0, 1], repeat=3):
    table = [(a1, 0, 1, a2, 0), (1, 1, a3, 0, 0), (0, 1, 1, 1, 0)]
    if len(table) == len(set(table)):
        ...

Пустые клетки перебираются product. Проверка len(table) == len(set(table)) выбрасывает варианты с одинаковыми строками: в условии сказано, что строки различны, и это не украшение, а ограничение — без него ответ часто перестаёт быть единственным.

Как записывают ответ

Буквы подряд, без пробелов и запятых — в том порядке, в каком идут столбцы таблицы: zxwy.

Откуда эти задачи

Задачи авторские, составлены в форме задания 2 ЕГЭ по информатике. Форма задания и способ решения — как на экзамене, а условия написаны своими словами. Логическая функция и фрагмент таблицы каждый раз новые.

Материалы подготовлены с использованием технологий искусственного интеллекта.