Python Boolean Operations - Or, And, and Not Explained with Examples

These are the Boolean operations, ordered by ascending priority:

Operation | Result | Notes  
--------- | ------------------------------------ | -----  
x or y | if x is false, then y, else x | (1)  
x and y | if x is false, then x, else y | (2)  
not x | if x is false, then True, else False | (3)

Notes:

  1. This is a short-circuit operator, so it only evaluates the second argument if the first one is False.
  2. This is a short-circuit operator, so it only evaluates the second argument if the first one is True.
  3. not has a lower priority than non-Boolean operators, so not a == b is interpreted as not (a == b) , and a == not b is a syntax error.

Examples:

or :

    >>> True or False    # Short-circuited at first argument.
    True
    >>> False or True    # Second argument is evaluated.
    True
    >>> False or False   # Second argument is evaluated.
    False

and :

    >>> True and False    # Second argument is evaluated.
    False
    >>> False and True    # Short-circuted at first argument.
    False
    >>> True and True     # Second argument is evaluated.
    True

not :

    >>> not True
    False
    >>> not False
    True

How python sees True and False

For python True==1 and False==0

1 and False //False
0 and 1 //False
1 and True //True
1 or 0 //True

Other boolean-operations:

These are other boolean operations which are not part of the Python language, you will have to define them yourself or use the boolean expression within the parenteses.

Operation | Result | Notes  
--------- | ------------------------------------ | -----  
nand ( not (x and y) ) | if x is True, then y, else x | (1) 
nor ( not (x or y) ) | if x is False, then x, else y | (2) 
xor ( not (not (x or y) or (x and y)) ) |  |  
xnor ( not (x or y) or (x and y) ) |  | 

Notes:

  1. This is a short-circuit operator, so it only evaluates the second argument if the first one is True.
  2. This is a short-circuit operator, so it only evaluates the second argument if the first one is False.

Examples:

nand :

Used in a defined way:

    def nand(x, y):
        return not(x and y)

output :

    >>> nand(True, True) # Short-circuited at first argument.
    False
    >>> nand(False, True) # Second argument is evaluated.
    True
    >>> nand(True, False) # Short-circuited at first argument.
    True
    >>> nand(False, False) # Second argument is evaluated.
    True

Used in a direct way:

    if not(x and y):
        do something....

output :

    >>> not(True and True): # Short-circuited at first argument.
    False
    >>> not(True and True) # Second argument is evaluated.
    True
    >>> not(True and True) # Short-circuited at first argument.
    True
    >>> not(True and True) # Second argument is evaluated.
    True

nor :

Used in a defined way:

    def nor(x, y):
        return not(x or y)

output :

    >>> nor(True, True) # Short-circuited at first argument.
    False
    >>> nor(False, True) # Second argument is evaluated.
    False
    >>> nor(True, False) # Short-circuited at first argument.
    False
    >>> nor(False, False) # Second argument is evaluated.
    True

Used in a direct way:

    if nor(x or y):
        do something....

output :

    >>> not(True or True): # Short-circuited at first argument.
    False
    >>> not(True or True) # Second argument is evaluated.
    False
    >>> not(True or True) # Short-circuited at first argument.
    False
    >>> not(True or True) # Second argument is evaluated.
    True

xor :

Used in a defined way:

    def xor(x, y):
        return not(not(x or y) or (x and y))

output :

    >>> xor(True, True)
    False
    >>> xor(False, True)
    True
    >>> xor(True, False)
    True
    >>> xor(False, False)
    False

Used in a direct way:

    if not(not(x or y) or (x and y)):
        do something....

output :

    >>> not(not(True or True) or (True and True)): # Short-circuited at first argument.
    False
    >>> not(not(True or False) or (True and False)) # Second argument is evaluated.
    True
    >>> not(not(False or True) or (False and True)) # Short-circuited at first argument.
    True
    >>> not(not(False or False) or (False and False)) # Second argument is evaluated.
    False

xnor :

Used in a defined way:

    def xnor(x, y):
        return not(x or y) or (x and y)

output :

    >>> xnor(True, True)
    True
    >>> xnor(False, True)
    False
    >>> xnor(True, False)
    False
    >>> xnor(False, False)
    True

Used in a direct way:

    if not(x or y) or (x and y):
        do something....

output :

    >>> not(not(True or True) or (True and True)): # Short-circuited at first argument.
    True
    >>> not(not(True or False) or (True and False)) # Second argument is evaluated.
    False
    >>> not(not(False or True) or (False and True)) # Short-circuited at first argument.
    False
    >>> not(not(False or False) or (False and False)) # Second argument is evaluated.
    True