Почему Not(a and b)
не то же самое, что Not a and Not b
?
while i < len(array) - 1:
if not array[i - 1] < array[i] and not array[i] > array[i + 1]:
i += 1
continue
while i < len(array) - 1:
isPeak = array[i - 1] < array[i] and array[i] > array[i + 1]
if not isPeak:
i += 1
continue
Я включил код, который вызвал это, но почему Not(a and b)
не то же самое, что Not a and Not b
?
Подсказка: напишите функцию, которая принимает массив целых чисел и возвращает длину самого длинного пика в массиве. Должен строго увеличиваться перед вершиной и уменьшаться после вершины пика, при этом для формирования пика требуется минимум три целых числа. Нет повторяющихся целых чисел.
Гугл Законы де Моргана.
Ответ на ваш обновленный вопрос: «потому что именно так работает логическая логика». Как сказано, см., например, en.wikipedia.org/wiki/De_Morgan%27s_laws
not (a and b) == not a or not b
и not a and not b == not (a or b)
.
Потому что они логически не эквивалентны. Вы можете решить это сами с помощью таблицы истинности:
Если вы посмотрите на законы Де Моргана, там доступно простое преобразование; когда вы распределяете not
в скобках, вы переключаетесь с and
на or
(и наоборот), поэтому not (A and B)
эквивалентно not A or not B
; если вы составите для этого таблицу истинности, вы обнаружите, что они идеально совпадают. Точно так же вытягивание not
из not A and not B
дает not (A or B)
, и снова таблица истинности совпадает.
@VLAZ: Спасибо за улучшенное форматирование, не знал они ввели таблицы в Markdown.
Потому что
not (a and b)
логически не то же самое, чтоnot a and not b
.