МБОУ "Радьковская СОШ"
с. Радьковка, Прохоровский район, Белгородская область
  • Задание 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

    Перейти на сайт ФИПИ "Открытый банк заданией ЕГЭ"

            Открытый банк заданией ЕГЭ

    2.     Раскрыть вкладку "ПОДБОР ЗАДАНИЙ" , в таблице выбрать вариант задания и ввести этот номер в окно "Номер задания"

    3.     Решить задание и проверить решение на сайте

    Задания открытого банка по информатике

    B60549

    DA42FA

    55620D

    75A1B7

    28F978

    DFF2F9

    480275

    5C0DAE

    CE3146

    CB62F5

    4A7773

    3DF4E1

    930944

    45A105

    04F474

    865EE2

    885F43

    F65508

    5A7D79

    8BBCEC

    F126F9

    BFA504

    C8147F

    4B7863

    93333D

    BC1201

    3CF37C

    7F406D

    CB5F36

    42A6BC

    B6C863

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

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

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

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