Оценка логических логик c с 3 или более переменными - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь понять поведение Python при оценке трех логических переменных.

>>> True and True and False == False
True

Оценивает 'True' , что я и ожидал.

Однако

>>> True and False and True == False
False
>>> False and True and True == False
False

оба оценивают как 'Ложь' , когда я ожидал Верно . Может кто-нибудь помочь мне понять, чего мне здесь не хватает. Я пробовал поиск, но не могу найти примеры, когда 3 булевых переменных вычисляются в одном выражении.

Спасибо!

Python Boolean statements

Ответы [ 3 ]

0 голосов
/ 26 февраля 2020

Предполагается, что три входных И Гейт таблицы

A   B   C   output
0   0   0   0
0   0   1   0
0   1   0   0
0   1   1   0
1   0   0   0
1   0   1   0
1   1   0   0
1   1   1   1


True and True and False == False  # 0 and 0 and 0 the answer is 0 (False)
False and True and True == False  # 0 and 1 and 0 the answer is 0 (False)
False and True and True == False  # 0 and 1 and 0 the answer is 0 (False)

, если вы хотите понять больше переменных

True and True and True and True and False  
 # 1 and 1 and 1 and 1 and 0  output will be 0 (False)
 # 1 * 1 * 1 * 1 * 0 output will be 0 (False)

True and True and True and True and True 
 # 1 and 1 and 1 and 1 and 1  output will be 1 (True)
 # 1 * 1 * 1 * 1 * 1 output will be 1 (True)

True and False or True or True or True 
# 1 and 1 or 1 or 1 or 1  output will be 1 (True)
# 1 * 1 + 1 + 1 + 1 output will be 1 (True)
0 голосов
/ 26 февраля 2020

Хорошо, я с этим справился.

Оператор '==' имеет приоритет и оценивается первым.

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

с квадратными скобками

Python 3.7.4 (default, Aug 13 2019, 15:17:50) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> (True and True and False) == False
True
>>> (True and False and True) == False
True
>>> (False and True and True) == False
True

без квадратных скобок

>>> True and True and False == False
True
>>> True and False and True == False
False
>>> False and True and True == False
False
>>> 
0 голосов
/ 26 февраля 2020

Это объяснение, которое я могу придумать

False and True and True == False
False and True and False        ( because True == False results in False)
(False and True) and False
False and False                 ( because 0 and 1 is 0)
False                           ( because 0 and 0 is 0)


True and False and True == False
True and False and False        ( because True == False results in False)
(True and False) and False      
False and False                 ( because 0 and 1 is 0)
False                           ( because 0 and 0 is 0)
...