Алгебра логики. Пустые и непустые объекты

Повторение:

Булева алгебра

В императивном языке программирования обычно используется только Логика высказываний.

Житейское обоснование алгебры логики:

Python:

Кстати, удобные многоместные сравнения вида a < b < c:

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

Свойства:

OR

если A истинно, результат в любом случае истинен, вычислять B не надо

AND

если A ложно, результат в любом случае ложен, вычислять B не надо

Ленивые вычисления

Python так и поступает!

   1 >>> a, b = 2, 3
   2 >>> if b != 0 and a/b > 0.5:
   3 ...     print(a, "почти равно", b)
   4 ... else:
   5 ...     print(a, "совсем не равно", b)
   6 2 почти равно 3
   7 >>> a, b = 2, 0
   8 >>> if b != 0 and a/b > 0.5:
   9 ...     print(a, "почти равно", b)
  10 ... else:
  11 ...     print(a, "совсем не равно", b)
  12 2 совсем не равно 0
  13 >>> a/b
  14 Traceback (most recent call last):
  15   File "<stdin>", line 1, in <module>
  16 ZeroDivisionError: division by zero
  17 
  18 division by zero
  19 

Пустые объекты

Тема необязательная, но если её не знать, непонятно, почему Python не выдаёт ошибку в таком случае:

   1 >>> a = 3
   2 >>> if a:
   3 ...     print("QQ")
   4 QQ
   5 >>> a
   6 3
   7 

Дело в том, что условие в Python — это объект, результат вычисления выражения, который считается «ложью», если объект пустой и «истиной», если объект непустой. Все объекты либо пусты, либо нет!

   1 >>> type(True)
   2 <class 'bool'>
   3 >>> bool(123)
   4 True
   5 >>> bool(0)
   6 False
   7 >>> bool("")
   8 False
   9 >>> bool(0.0)
  10 False
  11 >>> bool(123.345)
  12 True
  13 >>> bool("QWERQWER")
  14 True
  15 

Пересмотрим таблицы истинности для or и and:

OR

если A истинно, результат в любом случае истинен, вычислять B не надо. В качестве ответа можно вернуть само A. Если A ложно, ответ совпадает с истинностью или ложностью B.

  • Иначе говоря, or — это «если A непусто, то A, иначе B»

AND

если A ложно, результат в любом случае ложен, вычислять B не надо. В качестве ответа можно вернуть само A. Если A истинно, ответ совпадает с истинностью или ложностью B.

  • Иначе говоря, and — это «если A пусто, то A, иначе B»

    or

    and

    A

    B

    A or B

    A

    B

    A and B

    Пусто

    Пусто

    B

    Пусто

    Пусто

    A

    Пусто

    Непусто

    B

    Пусто

    Непусто

    A

    Непусто

    Пусто

    A

    Непусто

    Пусто

    B

    Непусто

    Непусто

    A

    Непусто

    Непусто

    B

Не, ну правда же:

   1 >>> 123 and "QQ"
   2 'QQ'
   3 >>> 0 and "QQ"
   4 0
   5 >>> 0 or "QQ"
   6 'QQ'
   7 >>> 56.3 or "QQ"
   8 56.3
   9 >>> "QWE" and False
  10 False
  11 >>> "QWE" or False
  12 'QWE'
  13 >>> a, c = 123, 456
  14 >>> a and c
  15 456
  16 >>> a or c
  17 123
  18 >>> a, c = "", "QWE"
  19 >>> a and c
  20 ''
  21 >>> a or c
  22 'QWE'
  23 

P.S. Чтобы не запутаться, лучше всё-таки пользоваться True и False. Но зато так веселее! Небинарная логика, вот это всё…

Д/З

Python/PhilosoPython2022/04_BooleanAlgebra (последним исправлял пользователь FrBrGeorge 2022-10-06 16:56:23)