The Boolean values in Python are
False, typically used to control if-statements and while-loops.
The Python "bool" type (short for "boolean") has only two values -
Expressions yielding a bool value like
a > 10, can be combined with and or not, like following (printing 'yay' if a is in the range 0..100 inclusive):
if a >= 0 and a <= 100: print('yay')
Python is unique in using the plain words like "and" for this. many languages use "&&" for and, "||" for or.
a and b → True if both are True
a or b → True if one or the other or both are True
not a → Inverts True/False
There is "precedence" between and/or/not, analogous to arithmetic precedence, where "*" has higher precedence than "+".
not is highest precedence, followed by
and, followed by
not is like unary minus e.g. '-6',
and is like * mutliplication,
or is like + addition.
Q: what does the following do:
if a < 6 and b < 6 or c < 6:
and goes first (higher precedence), so the above is equivalent to the following form with parenthesis added to show the order the comparisons are evaluated:
if (a < 6 and b < 6) or c < 6:
To force the
or to go first, put in parenthesis like this:
if a < 6 and (b < 6 or c < 6):
If you are unsure, you can always add parenthesis to an expression to force the order you want.
Suppose you have an int i, and you want to check if the char at that index is alphabetic .. but only if i is valid. You can write that this way...
if i < len(s) and s[i].isalpha():...
This works because the boolean evaluation goes left to right, stopping ("short-circuiting") as soon as it can. So in the example above, if
i < len(s) is False (i.e. i is large), the whole expression evaluates to False. In particular the
s[i].isalpha() is not evaluated. Attempting to evaluate it would be an error, since i is too large, creating an IndexError.
i<len(s) test to the left of the
s[i] in effect protects it, and this is a common programming pattern. Most computer languages use short circuiting in the their boolean expressions like this.