Главная Проекты Номер 2. ЕГЭ по информатике.

Номер 2. ЕГЭ по информатике.

Некоторые рекомендации о том, как описать проект.

Условие задачи:

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

-2

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

-3

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

Решение:

Смотрим и замечаем, что у нас два действия И и результат в таблице ИСТИНА во всех случаях, отсюда делаем вывод, что всех 3 части выражения должны быть истиной, т.е. 1 И 2 И 3 = 1. Последнее выражение упрощает поиск, NOT W должно быть истиной, значит W должно быть ложью, соответственно W можно поставить только в 4 столбик.

-4

Разберем вторую скобку (там проще). Она должны быть истинна, соответственно YZ не может стоять в позициях 1,3 и 2,3, остается 1 вариант 1,2. Отсюда получаем, что X будет на 3 позиции. И укажем сразу, что Y и Z должны быть разными.

-5

Также если посмотреть на таблицу (а в таблице не может быть одинаковых строк), то оставшееся место для Х будет 0.

-6

От заполненной таблицы можем определить, что Y будет на 2 позиции. Почему? Потому что по первой скобке выражения, чтобы получилась ИСТИНА, нужно чтобы хотя бы одна из переменных должна быть истиной, а такое невозможно (по строке 2 таблицы), если Y будет на 1 позиции.

То есть Х у нас должен быть всегда 0, отсюда делаем вывод, что Х стоит в третьем столбце и всегдя будет 0.

Соответственно, получаем ответ zyxw.

Ответ:

ZYXW

Решение в Python.

-7

Программа, которая выдает готовый ответ:

-8

Логика, алгебра логики.

Алгебра логики лежит в основе логических схем и операций, из которых состоят все вычисления в компьютерах: все компьютерные операции — это комбинации логических операций. Алгебра логики — это формализованная система, основанная на работе с 0 и 1, которая позволяет описывать вычисления и логические схемы. Она — основа цифровой логики и программирования.

В обычной алгебре мы работаем с переменными, которые могут принимать различные числовые значения: натуральные, целые, рациональные, иррациональные и так далее. Это — произвольные величины, неизвестные числа, с которыми проводятся математические операции.

В алгебре логики вместо переменных используются высказывания. Они играют ту же роль — могут принимать значения, но не любые, а строго два:

·         1 — соответствует истине

·         0 — соответствует лжи

Таким образом, высказывания — это аналог переменных, но с ограниченным набором значений.

Также как и в математике, где существуют операции (сложение, вычитание, умножение, деление, возведение в степень, логарифмы и т.д.), в алгебре логики есть логические операции:

·         НЕ (отрицание)

·         И (конъюнкция)

·         ИЛИ (дизъюнкция)

·         импликация (если… то…)

·         эквивалентность (равнозначность)

И в математике, и в алгебре логики есть функции — только в первом случае это функции над числами, а во втором — над логическими значениями (0 и 1).

По сути, алгебра логики — это аналог обычной алгебры, но в ней:

·         используются не числа, а только ноль и единица

·         переменными являются высказывания

·         операции — это логические связки

Причём в логике часто даже отказываются от привязки к понятиям «правда» и «ложь», и просто говорят: есть 0 и 1. Это позволяет рассматривать логику абстрактно, как математическую систему, независимо от смысла.

В рамках ЕГЭ по информатике используются пять логических операций:

1.      Отрицание (НЕ):

o    Обозначается: ¬A или not A (в Python: not)

o    Меняет значение на противоположное:
¬0 = 1, ¬1 = 0

2.      Конъюнкция (И):

o    Обозначается: A ∧ B, A * B, в ЕГЭ — «галочка вверх»

o    В Python: and

o    Результат 1, только если оба операнда равны 1
1 ∧ 1 = 1, остальные случаи — 0

3.      Дизъюнкция (ИЛИ):

o    Обозначается: A ∨ B, A + B, в ЕГЭ — «галочка вниз»

o    В Python: or

o    Результат 0, только если оба операнда равны 0
0 ∨ 0 = 0, остальные — 1

4.      Импликация (ЕСЛИ…ТО):

o    Обозначается: A → B, в Python заменяется на A <= B

o    Основное правило:
1 → 0 = 0 (это единственный случай, когда результат — ложь)
Остальные — истина

o    Запомнить можно по аналогии:
«Начальник сказал (1), работник не сделал (0) — плохо (ложь)»

5.      Эквиваленция (ТОГДА И ТОЛЬКО ТОГДА)

o    Обозначается: A ≡ B или A = = B

o    В Python — заменяется на A = = B

o    Результат 1, если значения одинаковые

В Python реализованы напрямую три операции – отрицание, конъюнкция и дизъюнкция. Импликация и эквиваленция напрямую не реализованы. Импликация (→)  заменяется на « <= », Эквиваленция (≡) → заменяется на « == ». Эти замены работают только с 0 и 1, и лишь в логическом смысле, но формально — это другие операции с другим приоритетом.

Приоритет операций

В логике:

1.      NOT (not)

2.      AND (and)

3.      OR (or)

4.      Импликация (→)

5.      Эквиваленция (≡)

В Python:

  • приоритет   » <= «, » == » выше, чем and, or, not

Python может неправильно интерпретировать выражения с « <= » или « == », потому что приоритет этих операций выше, чем у логических. Поэтому нужно явно ставить скобки, чтобы задать нужный порядок операций.

Таблицы истинности

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

Например, у нас есть логическая функция f=(x∧y∧z)∨(⇁x∧y∧⇁z)∨(x∧⇁y∧z)f=(xyz)∨(⇁xy∧⇁z)∨(x∧⇁yz) Таблица истинности показывает все возможные комбинации значений x, y, z (только 0 и 1) и соответствующее значение f для каждой комбинации.

Как построить таблицу истинности в Python:

      1.      Выводим заголовок:

print(‘x y z’)

2.      Перебираем все возможные комбинации значений:

for x in 0,1:
  for y in 0,1:
      for z in 0,1:

3.      Считаем значение функции для каждой комбинации:

f = (x and y and z) or (not x and y and not z) or \

             (x and not y and z)  

4.      Выводим результат, преобразуя True/False в 1/0 (int(f) используется, чтобы вместо True и False печатались привычные 1 и 0.):

         print(x, y, z, int(f))

Таблица позволяет увидеть, в каких случаях функция равна 1, а в каких — 0. Иногда важны только строки, где f = 1 или f = 0, можно добавить условие:

            if f==1:

                print(x,y,z)

Задача № 1 (53)

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

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

 Решение

Напишем программу, выведем таблицу значений для x,y,z. Выводим на экран заголовок таблицы:

print(‘x y z’)

Перебираем в цикле значения для всех переменных – 0 и 1:

:

for x in 0,1:
  for y in 0,1:
      for z in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

            f = (not x and y and z) or (not x and not z)

Если функция истинна, выводим на экран соответствующие значения переменных:

if f==1:
print(x,y,z)

Текст программы полностью:

print('x y z')
for x in 0,1:
    for y in 0,1:
        for z in 0,1:
            f = (not x and y and z) or (not x and not z)
            if f==1:
                print(x,y,z)

Запускаем программу, получаем таблицу значений переменных функции f, в том случае, если она равна единице.

Сравниваем её столбцы с таблицей из условия задачи: переменная х принимает значения только равные нулю, следовательно, ей соответствует второй столбец из таблицы в условии задачи, переменная z два раза принимает значение, равное нулю и один раз – единице, следовательно, ей соответствует первый столбец. Оставшийся второй столбец соответствует переменной у.

В ответе на задачу указываем zxy.

Ответ: zxy

Задача №2 (3648)

Логическая функция F задаётся выражением (a → d) ∧ ¬(b → c).

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

Решение

Напишем программу, выведем таблицу значений для a,b,c,d  если логическая функция F истинна. Выводим на экран заголовок таблицы:

print(‘a b c d’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for a in 0,1:
    for b in 0,1:
        for c in 0,1:
            for d in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = (a <= d) and not(b<=c)

Если функция истинна, выводим на экран соответствующие значения переменных:

               

if f==1:
    print(a,b,c,d)

Текст программы полностью:

print('a b c d')
for a in 0,1:
    for b in 0,1:
        for c in 0,1:
            for d in 0,1:
                f = (a <= d) and not(b<=c)
                if f==1:
                    print(a,b,c,d)

Запускаем программу, получаем таблицу значений переменных функции f, в том случае, если она равна единице.

Сравниваем её столбцы с таблицей из условия задачи: переменная c принимает значения только равные нулю, следовательно, ей соответствует четвертый столбец из таблицы в условии задачи, переменная b принимает значения только равные единице, ей соответствует третий столбец, переменная a два раза принимает значение, равное нулю и один раз – единице, следовательно, ей соответствует второй столбец. Оставшийся первый столбец соответствует переменной d.

Записываем в ответе dabc.

Ответ: dabc

Задача 3 (55)

Логическая функция F задаётся выражением (a → b) ∧ ((a ∧ b) → ¬c). Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных a, b, c.

В ответе напишите буквы a, b, c в том порядке, в котором идут соответствующие им столбцы (без разделителей).

 Решение

Попробуем получить результат не используя всю таблицу значений для функции, а возьмем только ту её часть, где f = 0.

Напишем программу, выведем таблицу значений для a, b, c если логическая функция F ложна. Выводим на экран заголовок таблицы:

print(‘a b c’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for a in 0,1:
    for b in 0,1:
        for c in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

            f = (a<=b) and ((a and b) <= (not c))

Если функция ложна, выводим на экран соответствующие значения переменных:

                

if f==0:
    print(a,b,c)

Обратим внимание на расстановку скобок. Если не поставить их правильным образом, программа выдаст ошибку:

Текст программы полностью:

print('a b c')
for a in 0,1:
    for b in 0,1:
        for c in 0,1:
            f = (a<=b) and ((a and b) <= (not c))
            if f==0:
                print(a,b,c)

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

Сравниваем её с данными из таблицы в условии задачи и получаем ответ. Первый столбец соответствует переменной с (две единицы и ноль), второй столбец – переменной b (два ноля и единица) и третий столбец – переменной a (три единицы).

В ответе на задачу указываем cba.

Ответ: cba

Задача № 4 (1636)

Логическая функция F задаётся выражением (x ∨ y) ∧ ¬(y ≡ z) ∧ ¬w.

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

Решение

Напишем программу, выведем таблицу значений для x,y,w,z если логическая функция F истинна. Выводим на экран заголовок таблицы:

print(‘x y z w’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for x in 0,1:
  for y in 0,1:
    for w in 0,1:
      for z in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = (x or y) and not (y==z) and not w

Если функция истинна, выводим на экран соответствующие значения переменных:

                

if f==1:
     print(x,y,w,z)

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = (x or y) and not (y==z) and not w
                if f==1:
                    print(x,y,w,z)

Запускаем программу, получаем таблицу значений переменных, при которых функция f принимает значение, равное единице.

Сравниваем её с таблицей из условия задачи. Переменной w однозначно соответствует четвертый столбец, так как только в нем могут стоять три ноля, в других столбцах уже есть хотя бы одна единица. Переменной z соответствует первый столбец, потому что она два раза принимает значения, равные нулю и один раз – единице, а в других столбцах стоят по две единицы. Чтобы определить столбец, соответствующий переменной x, обратим внимание на вторую строку в получившейся таблице. При z = 1, x = 1, а y = 0. Такая ситуация описывается первой строкой в таблице из условия задачи, отсюда получаем, что х соответствует третий столбец, а у – второй.

В ответе на задачу записываем zyxw.

Ответ: zyxw

Задача №5 (8151)

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

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

Решение

Напишем программу, выведем таблицу значений для x,y,w,z если логическая функция F истинна. Выводим на экран заголовок таблицы:

print(‘x y z w’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for x in 0,1:
  for y in 0,1:
    for w in 0,1:
      for z in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = w and not((x<=y) <= (y==z))

Если функция истинна, выводим на экран соответствующие значения переменных:

if f==1:
    print(x,y,w,z)

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = w and not((x<=y) <= (y==z))
                if f==1:
                    print(x,y,w,z)

Запускаем программу, получаем таблицу значений переменных, при которых функция f принимает значение, равное единице.

Сравниваем её с таблицей из условия задачи. Переменной w однозначно соответствует третий столбец, так как только в нем могут стоять три единицы, в других столбцах уже есть хотя бы один ноль. Обратим внимание на то, что во всех строках в получившейся таблицы есть хотя бы один ноль, следовательно, в первом столбце в третьей строке должен стоять ноль. Выходит, что первый столбец соответствует переменной z, потому что она два раза принимает значения, равные нулю и один раз – единице, а в других столбцах стоят по две единицы. Четвертый столбец в заданной таблице у нас определен полностью и соответствует x, следовательно, у соответствует второй столбец.

В ответе на задачу записываем zywx.

Ответ: zywx

Задача №6 (7511)

(ЕГЭ-2024) Логическая функция F задаётся выражением (y → ¬ (x → z))∨∨ w. На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

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

Решение

Напишем программу, выведем таблицу значений для x,y,w,z если логическая функция F ложна. Выводим на экран заголовок таблицы:

print(‘x y z w’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for x in 0,1:
  for y in 0,1:
    for w in 0,1:
      for z in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = (y <= (not(x<=z)) ) or w

Если функция ложна, выводим на экран соответствующие значения переменных  

if f==0:
      print(x,y,w,z)

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = (y <= (not(x<=z)) ) or w
                if f==0:
                    print(x,y,w,z)

Запускаем программу, получаем таблицу значений переменных, при которых функция f принимает значение, равное единице.

Сравниваем её с таблицей из условия задачи. Переменной y однозначно соответствует третий столбец, так как только в нем могут стоять три единицы, в других столбцах уже есть хотя бы один ноль. Заполняем этот столбец единицами. Переменной w может соответствовать только четвертый столбец, так она принимает значения только равные нулю, а в других столбцах присутствуют единицы. Заполним четвертый столбец в заданной таблице нулями. Обратим внимание на вторые строки в обеих таблицах – они одинаковы. Отсюда получим, что второй столбец соответствует переменной z, следовательно, оставшийся первый столбец соответствует переменной х.

В ответе на задачу записываем xzyw.

Ответ: xzyw

Задача №7 (7902)

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

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

Решение

Напишем программу, выведем таблицу значений для x,y,w,z если логическая функция F истинна. Выводим на экран заголовок таблицы:

print(‘x y z w’)

Перебираем в цикле значения для всех переменных – 0 и 1:

for x in 0,1:
  for y in 0,1:
    for w in 0,1:
      for z in 0,1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = (x==(y<=z)) and (y == (not(z<=w)) )

Если функция истинна, выводим на экран соответствующие значения переменных:

if f==1
    print(x,y,w,z)

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = (x==(y<=z)) and (y == (not(z<=w)) )
                if f==1:
                    print(x,y,w,z)

Запускаем программу, получаем таблицу значений переменных, при которых функция f принимает значение, равное единице.

Сравниваем её с таблицей из условия задачи. Переменной х однозначно соответствует второй столбец, так как только в нем могут стоять все единицы, в других столбцах уже есть хотя бы один ноль. Заполняем этот столбец единицами. Обратим внимание на третью строку заданной таблицы и вторую строку получившейся – они одинаковы, в них по два нуля и две единицы. Отсюда получаем, что первый столбец соответствует переменной w. Посмотрим на четвертую получившейся таблицы: при x = 1 и w = 0, y = 1 и z = 1. Такими значениями можно заполнить первую строку заданной таблицы. Учитывая, что при x = 1 и w = 1 (третья строка получившейся таблицы), y = 0, а z = 1, получаем, что третий столбец соответствует у, а четвертый – z.

В ответе на задачу записываем wxyz.

Ответ: wxyz

Задача № 8 (3644)

Логическая функция F задаётся выражением ¬w ∧ (y ∨ z → ¬x ∧ y).

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

Решение

Напишем программу, выведем таблицу значений для x,y,w,z если логическая функция F истинна. Выводим на экран заголовок таблицы:

print(‘x y z w’)

Перебираем в цикле значения для всех переменных – 0 и 1:

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = not w and ((y or z) <= (not x and y) )

Если функция истинна, выводим на экран соответствующие значения переменных:

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = not w and ((y or z) <= (not x and y) )
                if f==1:
                    print(x,y,w,z)

Запускаем программу, получаем таблицу значений переменных, при которых функция f принимает значение, равное единице.

Сравниваем её с таблицей из условия задачи. Исключим строку 0 0 0 0 в получившейся таблице, потому что в заданной такой строки нет. Переменной w однозначно соответствует первый столбец, так как только в нем могут стоять три ноля, в других столбцах уже есть хотя бы одна единица. Переменной у однозначно соответствует третий столбец, так как в нем есть две единицы, а переменные x и z принимают значение, равное единице, только один раз. Заполняем этот столбец в соответствии с полученными значениями для переменной у. Обратим внимание на третью строку заданной таблицы и третью строку получившейся – они одинаковы, в них по два нуля и две единицы. Отсюда получаем, что второй столбец соответствует переменной z, и, следовательно, оставшийся четвертый столбец соответствует переменной х.

В ответе на задачу записываем wzyx.

Ответ: wzyx

Задача №9 (6111)

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

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

Решение

Для каждого набора значений вычисляется результат для функции F из условия задачи:

                f = w or (y<=z) and x

По очереди запустим программу для f = 0 и f = 1. Если функция ложна, выводим на экран соответствующие значения переменных:

Если функция истинна, выводим на экран соответствующие значения переменных:

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f = w or (y<=z) and x
                if f==1:
                    print(x,y,w,z)

Сравним две полученные таблицы значений, для f = 0 и f = 1, с таблицей из условия задачи:

В первую очередь оставляем только те строки, которые могут помочь. Из таблицы для f = 0 оставляем те, в которых по две единицы. Переменная w принимает значения, только равные 0, поэтому можем сделать вывод, что третий столбец в заданной таблице соответствует переменной w. Заполняем свободные клетки в этом столбце нулями.

Из таблицы для f = 1 исключаем строки, в которых w = 1, а так же те, в которых больше двух единиц (в заданной таблице строка для f = 1 уже заполнена двумя нулями). Рассмотрим оставшиеся строки в получившейся таблице для f = 0. Видим в них по две единицы и два нуля. Заполним этими значениями заданную таблицу. Обратим внимание, что для f=0 переменная у принимает значения, равные единице в обеих строках, следовательно, первый столбец в заданной таблице – это переменная у. Для f = 1 переменная у равна 0 в обеих оставшихся строках, укажем в первой строке для переменной у значение 0. Получили строку, в которой стоит три нуля. Следовательно, это первая из двух оставшихся строк в получившейся таблице для f = 1. В ней z = 0, следовательно, этой переменной соответствует четвертый столбец, а х = 1, ей соответствует второй столбец.

В ответе на задачу записываем yxwz.

Ответ: yxwz

Задача №10 (6992)

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

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

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

Решение

Для каждого набора значений вычисляется результат для функций f1, f2, f3 из условия задачи:

                f1 = (w<=y) == (x and z)

                f2 = not x or not y or not z or w

                f3 = (z or w) and y and x

По очереди запустим программу для f1 = 1, f2 = 0 и f3 = 1. Выводим на экран соответствующие значения переменных:

                

#if f1==1:
#if f2==0:
 if f3==1:
    print(x,y,w,z)

Текст программы полностью:

print('x y w z')
for x in 0,1:
    for y in 0,1:
        for w in 0,1:
            for z in 0,1:
                f1 = (w<=y) == (x and z)
                f2 = not x or not y or not z or w
                f3 = (z or w) and y and x
                #if f1==1:
                #if f2==0:
                if f3==1:
                    print(x,y,w,z)

Сравним три полученные таблицы значений с таблицей из условия задачи:

 Видим, что для второй функции есть только один возможный набор переменных, причем из него однозначно определяется переменная w = 0, следовательно мы можем определить первый столбец – он соответствует переменной w. Для функций f1 и f3 переменная w = 1, поэтому исключим в получившихся таблицах строки, в которых w = 0. Обратим внимание на третью функцию. Нас интересует строка, в которой содержатся три единицы и один ноль. Этот ноль соответствует переменной z, то есть четвертый столбец определяется однозначно, это переменная z. В таблице для первой функции оставим только те строки, в которых z = 0. Нам подходит только одна строка, в которой два ноля и две единицы.  Одна единица соответствует переменной w, вторая – переменной х. То есть можно сделать вывод, что переменной х соответствует третий столбец в заданной таблице, и оставшийся второй соответствует переменной у.

В ответе на задачу записываем wyxz.

Ответ:  wyxz