# 2.3. Type Bool¶

## 2.3.1. Definition¶

• True - Positive value

• False - Negative value

• First letter capitalized, other are lower cased

>>> data = True
>>> data = False


## 2.3.2. Type Casting¶

• Builtin function bool() converts argument to bool

>>> bool(True)
True
>>> bool(False)
False
>>> bool(1)
True
>>> bool(0)
False

>>> bool(1)
True
>>> bool(2)
True
>>> bool(3)
True
>>> bool(-1)
True
>>> bool(-2)
True
>>> bool(-3)
True
>>> bool(1.0)
True
>>> bool('Jan Twardowski')
True


Negative values

>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(0+0j)
False
>>> bool(0.0+0.0j)
False
>>> bool(False)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool(())
False
>>> bool([])
False
>>> bool({})
False

>>> bool(int())
False
>>> bool(float())
False
>>> bool(complex())
False
>>> bool(bool())
False
>>> bool(str())
False
>>> bool(tuple())
False
>>> bool(list())
False
>>> bool(dict())
False
>>> bool(set())
False
>>> bool(frozenset())
False


## 2.3.3. Comparison¶

• x < y - Less than

• x <= y - Less or equal

• x > y - Greater than

• x >= y - Greater or equal

• == - Equals

• != - Not Equals

>>> 10 < 2
False
>>> 10 <= 2
False
>>> 10 > 2
True
>>> 10 >= 2
True
>>> 10 == 2
False
>>> 10 != 2
True

>>> x = 1
>>> y = 2
>>>
>>> x == 1
True
>>> y == 2
True
>>> x == y
False
>>> x != y
True


## 2.3.4. Conjunction¶

Definition:

1 & 1 -> 1
1 & 0 -> 0
0 & 1 -> 0
0 & 0 -> 0


Example:

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


Use Cases:

>>> firstname = 'Mark'
>>> lastname = 'Watney'
>>>
>>> firstname == 'Mark' and lastname == 'Watney'
True
>>> firstname == 'Mark' and lastname == 'Twardowski'
False

>>> bool(1 and 1)
True
>>> bool(1 and 0)
False
>>> bool(0 and 1)
False
>>> bool(0 and 0)
False

>>> bool('Jan' and 'Jan')
True
>>> bool('Jan' and '')
False
>>> bool('' and 'Jan')
False
>>> bool('' and '')
False

>>> bool('Jan' and 1)
True
>>> bool('Jan' and 0)
False
>>> bool(0.0 and 'Jan')
False
>>> bool(1 and False)
False


## 2.3.5. Disjunction¶

Definition:

1 | 1 -> 1 1 | 0 -> 1 0 | 1 -> 1 0 | 0 -> 0

Example:

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False


Use Cases:

>>> bool(1 or 1)
True
>>> bool(1 or 0)
True
>>> bool(0 or 1)
True
>>> bool(0 or 0)
False

>>> bool('José' or 'Иван')
True
>>> bool('José' or '')
True
>>> bool('' or 'José')
True
>>> bool('' or '')
False

>>> bool(1 or 'Иван')
True
>>> bool(True or '')
True
>>> bool(0 or True)
True
>>> bool(0.0 or False)
False


## 2.3.6. Boolean Algebra¶

Example:

>>> True and True or False
True
>>> False and False or True
True

>>> (True and True) or False
True
>>> True and (True or False)
True

>>> True and False or False
False
>>> True and (False or False)
False


Use Case:

>>> firstname = 'Mark'
>>> lastname = 'Twardowski'
>>>
>>> (firstname == 'Mark' and lastname == 'Watney') \
...  or (firstname == 'Jan' and lastname == 'Twardowski') \
...  or (firstname == 'Melissa' and lastname == 'Lewis')
False


## 2.3.7. Built-in Functions¶

• type() - Checks type of an object

• isinstance(a, x) - If a is instance of x

• isinstance(a, (x,y)) - If a is instance of x or y

>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>

>>> isinstance(1, bool)
False
>>> isinstance(1, int)
True
>>> isinstance(1, float)
False

>>> isinstance(1.23, bool)
False
>>> isinstance(1.23, int)
False
>>> isinstance(1.23, float)
True

>>> isinstance(True, bool)
True
>>> isinstance(True, int)
True
>>> isinstance(True, float)
False
>>> isinstance(False, bool)
True
>>> isinstance(False, int)
True
>>> isinstance(False, float)
False


## 2.3.8. Example¶

>>> import numpy as np
>>>
>>> a = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
...
>>> a > 2
array([[False, False,  True],
[ True,  True,  True],
[ True,  True,  True]])
>>> a < 7
array([[ True,  True,  True],
[ True,  True,  True],
[False, False, False]])
>>> a == 9
array([[False, False, False],
[False, False, False],
[False, False,  True]])
>>> (a>2) & (a<7) | (a==9)
array([[False, False,  True],
[ True,  True,  True],
[False, False,  True]])
>>> a[(a>2) & (a<7) | (a==9)]
array([3, 4, 5, 6, 9])


## 2.3.9. Assignments¶

"""
* Assignment: Type Bool True or False
* Filename: type_bool_true_or_false.py
* Complexity: easy
* Lines of code: 16 lines
* Time: 5 min

English:
1. Use data from "Given" section (see below)
2. Which variables are True?
3. Which variables are False?

Polish:
1. Użyj danych z sekcji "Given" (patrz poniżej)
2. Które zmienne są True?
3. Które zmienne są False?

Tests:
>>> a
False
>>> b
True
>>> c
False
>>> d
False
>>> e
False
>>> f
False
>>> g
True
>>> h
True
>>> i
True
>>> j
True
>>> k
False
>>> l
True
>>> m
False
>>> n
False
>>> o
False
>>> p
True
>>> q
False
"""

# Given
a = bool(False)
b = bool(True)

c = bool(0)
d = bool(0.0)
e = bool(-0)
f = bool(-0.0)

g = bool('a')
h = bool('.')
i = bool('0')
j = bool('0.0')
k = bool('')
l = bool(' ')

m = bool(int('0'))
n = bool(float(str(-0)))

o = bool(-0.0 + 0.0j)
p = bool('-0.0+0.0j')
q = bool(complex('-0.0+0.0j'))


"""
* Assignment: Type Bool Simple
* Filename: type_bool_simple.py
* Complexity: easy
* Lines of code: 9 lines
* Time: 5 min

English:
1. Use data from "Given" section (see below)
2. What you need to put in expressions to get the expected outcome?
3. In place of ellipsis (...) insert only True or False
4. Compare result with "Tests" section (see below)

Polish:
1. Użyj danych z sekcji "Given" (patrz poniżej)
2. Co należy podstawić w wyrażeniach aby otrzymać wartość oczekiwaną?
3. W miejsce trzech kropek (...) wstawiaj tylko True lub False
4. Porównaj wyniki z sekcją "Tests" (patrz poniżej)

Tests:
>>> bool(a)
True
>>> bool(b)
True
>>> bool(c)
False
>>> bool(d)
True
>>> bool(e)
True
>>> bool(f)
False
>>> bool(g)
True
>>> bool(h)
True
>>> bool(i)
False
"""

# Given
a = True == ...
b = True != ...
c = not ...
d = bool(...) == True
e = bool(...) == False
f = ... or ...
g = ... and ...
h = bool(bool(...) == ...) or False
i = bool(...) is not bool(False)