Булева алгебра - почему не (истина и ложь) истина?

Я работаю над книгой «Изучай Python трудным путем». Упражнение 27 (http://learnpythonthehardway.org/book/ex27.html) начинается с булева алгебра.

Итак, мой вопрос: почему not(True and False) верно?

Насколько я понял, это должно быть то же самое, что и False and True.


person Forcel    schedule 21.08.2015    source источник
comment
~(A . B) = ~A + ~B – это закон Де Моргана. Итак, not(True and False) разрешается в not(True) or not(False), что равно False or True, что равно True.   -  person Sid    schedule 21.08.2015


Ответы (5)


Ваша интерпретация неверна, см. законы Де Моргана; в частности, отрицание союза — это дизъюнкция отрицаний.

not (True and False) (отрицание союза == not(a and b)) эквивалентно False or True (дизъюнкция отрицаний == (not a) or (not b)); обратите внимание на переключение с and на or!

Вы также можете проработать шаги:

  • not(True and False)
    • work out the part in parentheses first, True and False -> False
  • подставьте этот результат обратно в выражение: not(False) -> True.
person Martijn Pieters    schedule 21.08.2015
comment
Возможно, вам следует немного пояснить последний абзац, как вы начинаете оценку внутри скобок и так далее. Честно говоря, это представлено в немного нечитаемом стиле. - person John; 21.08.2015

not (True and False) сначала упрощается до not (False), а затем до True.

person chepner    schedule 21.08.2015

Давайте сделаем это шаг за шагом:

(True and False) оценивается как (False)

not (False) оценивается как True

Достаточно легко :)

person Daniel Lenz    schedule 21.08.2015

По порядку операций то, что находится внутри скобок, решается в первую очередь, смотрите на это так с переменными:

a == True and False == False

not(True and False) == not(a) == not(False) == True

То, о чем вы думали, было:

not(True) and not(False)

Что действительно было бы False, потому что:

a == not(True) == False
b == not(False) == True

not(True) and not(False) == a and b == False and True == False
person ThatGuyRussell    schedule 21.08.2015

Вам следует ознакомиться с законами Де Моргана, в которых говорится (неофициально):

«не (А и В)» — это то же самое, что «(не А) или (не В)»

также «не (А или В)» — это то же самое, что «(не А) и (не В)».

Итак, в вашем случае not(True and False) совпадает с not(True) or not(False), который совпадает с False or True, который равен True.

person jrjc    schedule 21.08.2015