There are only two Boolean values. They are True and False. Capitalization is important, since true and false are not Boolean values (remember Python is case sensitive). A boolean expression is an expression that evaluates to a Boolean value. The equality operator, ==, compares two values and produces a Boolean value related to whether the two values are equal to one another.

x != y # x is not equal to yx > y # x is greater than yx < y # x is less than yx >= y # x is greater than or equal to yx <= y # x is less than or equal to y

Logical OperatorsThere are three logical operators: and, or, and not. The meaning of these operators is similar to their meaning in English.

Examples:

x > 0 and x < 10 is true only if x is greater than 0 and at the same time, x is less than 10.

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.

Uses for Boolean

Boolean functions are always used in while loops.They are always used in if statements.

These things will be commonly used in all Python programs, so Boolean functions must be known.

alext6453 wrote: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.

Also note that a boolean operator is not always needed. If you are in a context requiring a boolean operator (such as an if statement), Python will attempt to convert whatever you put there into either True or False. Numbers are False if they are zero, and are True otherwise. Sequences (strings, lists, tuples) are False if they have zero length, and are True otherwise. Dictionaries also convert to False if empty. Instances of user created classes are always True by default, but this can be overridden by overloading the __nonzero__ method or the __len__ method.

First, the idea of short circuit logic needs to be covered. This means that when you have x() and y() if x() returns boolean False, then y() isn't evaluated. If y() has side effects, this matters (good code uses side effects sparingly, but sometimes it happens). This is done mostly for efficiency reasons, since the value of y() doesn't matter in the previously mentioned expression. There is a similar result for or. The expression x() or y() returns True immediately if x() is True.

Secondly, what does the expression False or True evaluate to? Well, True of course! How about False or 7? It evaluates, possibly surprisingly, to 7! What about False or []? It evaluates to the empty list on the right. How about [1, 2, 4] or 7? The list on the left. Python's and and or return the last part evaluated, whatever the object is, and not to a boolean conversion of that value. Here is a common-ish trick

If the name variable is passed in from raw_input(), and the user entered nothing, then their name will default to "User" and otherwise it will capitalize their name. This is also often done for default None arguments in functions.

Now back to the original expression. We might think that the 'a' or 'b' acts like a list, and the equal sign gets distributed like a multiplication in math. This is not the case, using unnecessary parenthesis (but to clarify things here), it is actually equivalent to:

As we can clearly see, the x comparison gets evaluated to either True or False and then if it's False, ('b') gets evaluated, and that's always boolean True. So, the expression x == 'a' or 'b' always evaluates to True. An unfortunate programmer may test their own code for 'a' and 'b', find that both work, and be satisfied without realizing that it never fails. (Always test failure!)

alext6453 wrote:Boolean functions are always used in while loops.They are always used in if statements.

Strictly speaking, you talked about operators and not functions, and if you're using a function as part of an if or while it needn't be strictly boolean. You could have a condition like this

(This could easily be changed to be a function, or generator.) You could also do it with a list, popping from the end until the list is empty, or anything like that.

I make this distinction because although often times these differences do not matter, sometimes they do, and knowing the proper terminology can be very helpful for efficient communication in very technical situations.

Join the #python-forum IRC channel on irc.freenode.net!

Please do not PM members regarding questions which are meant to be discussed publicly. The point of the forum is so that others can benefit from it. We don't want to help you over PMs or emails.