8.3. Logical operators¶
There are three logical operators: and
, or
, and not
. The
semantics (meaning) of these operators is similar to their meaning in English.
For example, x > 0 and x < 10
is true only if x
is greater than 0 and
at the same time, x is less than 10. How would you describe this in words? You would say that
x is between 0 and 10, not including the endpoints.
n % 2 == 0 or n % 3 == 0
is true if either of the conditions is true,
that is, if the number is divisible by 2 or divisible by 3. In this case, one, or the other, or
both of the parts has to be true for the result to be true.
Finally, the not
operator negates a boolean expression, so not x > y
is true if x > y
is false, that is, if x
is less than or equal to
y
.
Common Mistake!
There is a very common mistake that occurs when programmers try to write boolean expressions.
For example, what if we have a variable number
and we want to check to see if its value is 5, 6, or 7?
In words we might say: “number equal to 5 or 6 or 7”. However, if we translate this into Python, number == 5 or 6 or 7
, it will not be correct.
The or
operator must join the results of three equality checks. The correct way to write this is number == 5 or number == 6 or number == 7
.
This may seem like a lot of typing but it is absolutely necessary. You cannot take a shortcut.
Well, actually, you can take a shortcut but not that way. Later in this chapter you’ll learn about
the in
operator for strings and sequences: you could write number in [5, 6, 7]
.
Check your understanding

condition31: What is the correct Python expression for checking to see if a number stored in a variable x is between 0 and 5.
 x > 0 and < 5
 Each comparison must be between exactly two values. In this case the righthand expression < 5 lacks a value on its left.
 0 < x < 5
 This is tricky. Although most other programming languages do not allow this syntax, in Python, this syntax is allowed. However, you should not use it. Instead, make multiple comparisons by using and or or.
 x > 0 or x < 5
 Although this is legal Python syntax, the expression is incorrect. It will evaluate to true for all numbers that are either greater than 0 or less than 5. Because all numbers are either greater than 0 or less than 5, this expression will always be True.
 x > 0 and x < 5
 Yes, with an ``and`` keyword both expressions must be true so the number must be greater than 0 an less than 5 for this expression to be true.
in
and not in
operators