НЕ, И, ИЛИ: одна скобка, которая меняет весь ответ

Таблица истинности для закона де Моргана, понятные условия на числа и проверка выражений в Python без путаницы между and и or.

К чтению
Содержание
  1. Четыре строки вместо догадки
  2. Как правильно отрицать сравнение
  3. Та же мысль в Python
  4. Проверка второго закона
  5. Маленькая самостоятельная задача

«Не выполнены оба условия сразу» и «не выполнено ни одно условие» — разные требования. Чтобы разобраться, не нужно угадывать по звучанию фразы: достаточно взять четыре возможных сочетания истины и лжи.

Пусть AA означает «число больше пяти», а BB — «число чётное». Рассмотрим выражение ¬(A∧B)\neg(A\land B). Оно отрицает совместное выполнение двух условий. Для числа семь первое условие верно, второе неверно: совместное выполнение ложно, а его отрицание истинно.

Четыре строки вместо догадки

A B A И B НЕ (A И B)
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0

Последний столбец совпадает с выражением (¬A)∨(¬B)(\neg A)\lor(\neg B). Достаточно, чтобы хотя бы одно из первоначальных условий не выполнялось. При раскрытии отрицания меняется союз, а отрицание применяется к каждому условию.

Законы де Моргана: отрицание И превращается в ИЛИ отрицаний; отрицание ИЛИ превращается в И отрицаний. Под схемой показан пример с числом семь.

Как правильно отрицать сравнение

Отрицание x>5x>5 — это x≤5x\le5, а не x<5x<5: граница пять тоже должна попасть в противоположное множество. Аналогично отрицание x=3x=3 означает x≠3x\ne3.

Наше выражение можно прочитать так: «число не больше пяти или число нечётное». Семь подходит, восемь не подходит, четыре подходит. Каждая проверка объяснима без программы. Именно так удобно ловить ошибку в границе, которая незаметна на случайных больших числах.

Та же мысль в Python

Pythonfor x in (4, 5, 7, 8):
    a = x > 5
    b = x % 2 == 0
    left = not (a and b)
    right = (not a) or (not b)
    print(x, left, right)

Оба результата в каждой строке должны совпасть. Для наших четырёх чисел получится соответственно True, True, True, False. Операторы and, or, not и их приоритет описаны в документации Python. В общем случае and и or могут возвращать сами операнды; здесь переменные a и b уже логические, поэтому вывод состоит из логических значений.

Проверка второго закона

Теперь отрицайте «число больше пяти или чётное»: ¬(A∨B)\neg(A\lor B). Чтобы всё выражение было истинно, оба исходных условия должны быть ложными. Подходит, например, три: не больше пяти и нечётное. Семь уже не подходит.

Полезно сначала записать словесное условие, затем формулу со скобками и только потом код. Не заменяйте and на & в обычной проверке условий на целые числа: побитовые операции решают другую задачу.

Маленькая самостоятельная задача

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

Разберите ещё три граничных значения самостоятельно, затем продолжите информатику ЕГЭ или информатику ОГЭ. Проверка на границах пригодится и в логических выражениях, и в программах обработки файлов.

Материал подготовлен с помощью ИИ. Примеры учебные и не являются официальными заданиями экзамена. Источники указаны в статье. Как устроены материалы Курсика . Сообщить о неточности.

Обновлено . Статью можно сохранить и вернуться к ней во время подготовки.