# 7.2. 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.

**Check your understanding**

- x > 0 and < 5
- Each comparison must be between exactly two values. In this case the right-hand expression < 5 lacks a value on its left.
- 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. Although most other programming languages do not allow this mathematical syntax, in Python, you could also write 0 < x < 5.

select-2-1: What is a correct Python expression for checking to see if a number stored in a variable x is between 0 and 5?