МБОУ "Радьковская СОШ"
с. Радьковка, Прохоровский район, Белгородская область
  • Задание 2. Составление таблицы истинности логической функции

    Функция zip() в Python

    Функция zip() в Python создает итератор, который объединяет элементы из нескольких источников данных. Эта функция работает со списками, кортежами, множествами и словарями для создания списков или кортежей, включающих все эти данные.

    Уровень 2: Zip работает с любым количеством итерируемых объектов

    Функция zip в Python  имеет дело  с любым количеством итерируемых объектов одновременно.

    Вот мы передаём в функцию zip один список:

    id = [1, 2, 3, 4]
    record = zip(id)
    print(list(record))
    # [(1,), (2,), (3,), (4,)]

    А как насчёт трёх списков?

    id = [1, 2, 3, 4]
    leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Yang Zhou']
    sex = ['male', 'male', 'male', 'male']
    record = zip(id, leaders, sex)
    
    print(list(record))
    # [(1, 'Elon Mask', 'male'), (2, 'Tim Cook', 'male'), (3, 'Bill Gates', 'male'), (4, 'Yang Zhou', 'male')]

    То есть неважно, сколько итерируемых объектов передаётся в функцию zip: она в любом случае работает как надо.

    Кстати, если аргумента нет, функция zip возвращает пустой итератор.

    Уровень 2: работа с неравными по длине аргументами

    В реальности данные не всегда чистые и полные: иногда приходится иметь дело с неравными по длине итерируемыми объектами. По умолчанию результат функции zip берётся по длине самого короткого итерируемого объекта.

    id = [1, 2]
    leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Yang Zhou']
    record = zip(id, leaders)
    
    print(list(record))
    # [(1, 'Elon Mask'), (2, 'Tim Cook')]

    Так, в приведённом выше коде самый короткий список  —  это id. Поэтому record содержит только два кортежа, а два последних лидера в списке leaders были отброшены.

    Уровень 3: операция распаковывания

    Если в предыдущем примере получить сначала record, то как распаковать его на отдельные итерируемые объекты?

    К сожалению, в Python нет функции распаковывания. Но если воспользоваться хитрыми приёмами звёздочек, распаковывание превращается в очень простую задачу.

    record = [(1, 'Elon Mask'), (2, 'Tim Cook'), (3, 'Bill Gates'), (4, 'Yang Zhou')]
    id, leaders = zip(*record)
    print(id)
    # (1, 2, 3, 4)
    print(leaders)
    # ('Elon Mask', 'Tim Cook', 'Bill Gates', 'Yang Zhou')

    С помощью звёздочки здесь выполнена операция распаковки: распакованы все четыре кортежа из списка record.

    Уровень 4: Создание и обновление словарей

    С помощью функции zip очень просто создавать или обновлять dict, задействуя отдельные списки.

    id = [1, 2, 3, 4]
    leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Yang Zhou']
    
    # создаём словарь, используя функцию «dict»
    leader_dict_2 = dict(zip(id, leaders))
    print(leader_dict_2)
    # {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4: 'Yang Zhou'}
    

    Решение задач

    Логическая функция F задаётся выражением:

    ¬ x v y v (¬ z ^ w)

    На рисунке приведён фрагмент таблицы истинности функции F, содержащий все наборы аргументов, при которых функция F ложна. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    yzwx

    Решение

    from itertools import *
    
    def f(x,y,z,w): return not x or y or (not z and w)
    
    t = [(0, 0, 0, 1), (0, 1, 0, 1), (0, 1, 1, 1)]
    
    for p in permutations('xyzw'):
        if [f(**dict(zip(p, r))) for r in t] == [0, 0, 0]:
            print(p)

    Логическая функция F задаётся выражением:

    (x v y) -> (y = z)

    На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z.

    В ответе напишите буквы x, y, z в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    zxy

    Решение

    from itertools import *
    
    def f(x, y, z): return (x or y) <= (y == z)
    
    for a1, a2, a3 in product((0, 1), repeat = 3):
        t = [(0, 0, a1), (0, a2, a3)]
        if len(t) == len(set(t)):
            for p in permutations('xyz'):
                if [f(**dict(zip(p, r))) for r in t] == [0, 0]:
                    print(p)

    Домашнее задание

    Логическая функция F задаётся выражением:

    (x v y) ^ ¬(y = z) ^ ¬w

    На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    zyxw

    Логическая функция F задаётся выражением

    ((x → z) → y) ∨ ¬w

    Ниже приведён частично заполненный фрагмент таблицы истинности этой функции, содержащий неповторяющиеся строки.

    Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    zxyw

    Миша заполнял таблицу истинности логической функции

    F = ¬ (x → y) ˅ (x ≡ z) ˅ w
    но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных x, y, z, w.

    Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    xwzy

    Логическая функция F задаётся выражением:

    ((x ≡ y) → (¬ z ˅ w)) ≡ ¬ ((w → x) ˅ (y → z))

    Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    wzyx

    Логическая функция F задаётся выражением:

    ¬(x → w) ˅ (y → z) ˅ ¬y

    Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.

    В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

    Ответ:

    yxwz

    Логическая функция F задаётся выражением

    ¬(¬(x→¬w)∧z)∧¬(w→z)∧(x→¬z)

    На рисунке приведён заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся наборы аргументов

    Screenshot

    Определите, сколько существует различных способов расстановки переменных w,x,y,z подходящих для данной таблицы истинности?

    Ответ: 8

    Серёжа переписывал таблицу истинности логической функции F

    ((1≡w)≡(¬((w∧x)∨y)))→z

    но успел перенести только фрагмент из пяти различных её строк, даже не указав, каким столбцам таблицы соответствуют переменные.

    Screenshot

    Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.

    В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, которая соответствует первому столбцу; затем буква, которая соответствует второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между ними ставить не нужно.

    Ответ: xzyw

    Тестирование

    Внимание. Прохождение теста доступно только один раз,  результаты сохраните на свою электронную почту.

    Домашнее задание 1

    Сайт использует сервис веб-аналитики Яндекс Метрика с помощью технологии «cookie». Это позволяет нам анализировать взаимодействие посетителей с сайтом и делать его лучше. Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie