37
votes

I'm a little confused with the results I'm getting with the logical operators in Python. I'm a beginner and studying with the use of a few books, but they don't explain in as much detail as I'd like.

here is my own code:

five = 5
two = 2

print five and two

>> 2

It seems to be just outputting the two variable.

five = 5
two = 2
zero = 0

print five and two and zero

So, I added another variable integer. Then I printed and got the following output:

>> 0

What is going on with Python in the background? Why isn't the output something like 7 or 5, 2.

7
Thanks guys, I do understand that I could simply do five + two which would equal 7, I just wanted to know exactly how the AND operator works. - BubbleMonster
It might be interesting to note that had you swapped the order of the variables in your last statement --- print five and zero and two --- you would have gotten 0 as the result. You could say that and "returns the first falsey value it finds, and if it doesn't find anything, returns the last result. - Justin L.
The reason for this is because and answers the question: "Are all of these things truthy?", and returns something truthy/falsey as its answer. Consider a and b. and would check a first. If a is falsey, then the entire and statement must return false (because if one thing is false, then it is impossible that both are true). So and would return something falsey, and it uses a (because a is already falsey) as a matter of convenience. However, if a is true, then and needs to only return b. - Justin L.
Why? Because if b is truthy, then both a and b are truthy. If b is fasley, then it must be that the entire and statement is false (because not both are true). So the entire result of the and statement replies completely on b. If b is true, it gives the right answer. If b is false, it gives the right answer. So and will return the first value if the first value is false, and otherwise, return the second value. - Justin L.
Sounds like it is returning you the minimum value. - user8167727

7 Answers

48
votes

Python Boolean operators return the last value evaluated, not True/False. The docs have a good explanation of this:

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

5
votes

As a bit of a side note: (i don't have enough rep for a comment) The AND operator is not needed for printing multiple variables. You can simply separate variable names with commas such as print five, two instead of print five AND two. You can also use escapes to add variables to a print line such as print "the var five is equal to: %s" %five. More on that here: http://docs.python.org/2/library/re.html#simulating-scanf

Like others have said AND is a logical operator and used to string together multiple conditions, such as

if (five == 5) AND (two == 2):
    print five, two
3
votes

Boolean And operators will return the first value 5 if the expression evaluated is false, and the second value 2 if the expression evaluated is true. Because 5 and 2 are both real, non-false, and non-null values, the expression is evaluated to true.

If you wanted to print both variables you could concatenate them to a String and print that.

five = 5
two = 2
print five + " and " + two

Or to print their sum you could use

print five + two

This document explains how to use the logical Boolean operators.

1
votes

This AND in Python is an equivalent of the && in Java for instance. This doesn't mean the and in the English language. The AND is a logical operator. Assume five holds 5 and two holds 2. From Python documentation: The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned. Basically, it evaluates the last integer in your case which is true.

if (five and two):
...     print "True"
... else:
...     print "False"

The AND is a logical operator, to test the logic for a specific case, not an arithmetic operator. If you want to get results like 7 for five and two, you should rather use "+" which means adding two integers. See below:

>>> five = 5
>>> two = 2
>>> print five + two
7
1
votes

Try 0 and 9.

The result is 0 because the value of 0 is false. The operand on the left of the and operator is False so the whole expression is False and returns 0

0
votes

In Python any non-zero integer value is true; zero is false.

The OP’s values are both non-zero.

The AND operator tests from left to right,

with and, if all values are True, returns the last evaluated value. If any value is false, returns the first one.

Since both are non-zero, both are true, so the last value is returned

-2
votes

To convert the integer variable to a string , add str in front of each variable

five = 5 two = 2

print(str(five) + " and " + str(two))