«Не выполнены оба условия сразу» и «не выполнено ни одно условие» — разные требования. Чтобы разобраться, не нужно угадывать по звучанию фразы: достаточно взять четыре возможных сочетания истины и лжи.
Пусть означает «число больше пяти», а — «число чётное». Рассмотрим выражение . Оно отрицает совместное выполнение двух условий. Для числа семь первое условие верно, второе неверно: совместное выполнение ложно, а его отрицание истинно.
Четыре строки вместо догадки
| A | B | A И B | НЕ (A И B) |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Последний столбец совпадает с выражением . Достаточно, чтобы хотя бы одно из первоначальных условий не выполнялось. При раскрытии отрицания меняется союз, а отрицание применяется к каждому условию.
Как правильно отрицать сравнение
Отрицание — это , а не : граница пять тоже должна попасть в противоположное множество. Аналогично отрицание означает .
Наше выражение можно прочитать так: «число не больше пяти или число нечётное». Семь подходит, восемь не подходит, четыре подходит. Каждая проверка объяснима без программы. Именно так удобно ловить ошибку в границе, которая незаметна на случайных больших числах.
Та же мысль в 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 уже логические, поэтому вывод состоит из логических значений.
Проверка второго закона
Теперь отрицайте «число больше пяти или чётное»: . Чтобы всё выражение было истинно, оба исходных условия должны быть ложными. Подходит, например, три: не больше пяти и нечётное. Семь уже не подходит.
Полезно сначала записать словесное условие, затем формулу со скобками и только потом код. Не заменяйте and на & в обычной проверке условий на целые числа: побитовые операции решают другую задачу.
Маленькая самостоятельная задача
Условие допускает возраст от четырнадцати до семнадцати включительно. Запишите отрицание диапазона. Ответ: возраст меньше четырнадцати или больше семнадцати. В исходном диапазоне четырнадцать и семнадцать включены, поэтому в его отрицание эти границы не входят.
Разберите ещё три граничных значения самостоятельно, затем продолжите информатику ЕГЭ или информатику ОГЭ. Проверка на границах пригодится и в логических выражениях, и в программах обработки файлов.