Python's Logical Operator AND
Solution 1
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 evaluatesx
; ifx
isfalse
, its value is returned; otherwise,y
is evaluated and the resulting value is returned.
Solution 2
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
Solution 3
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.
Solution 4
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
Solution 5
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
BubbleMonster
Updated on May 13, 2021Comments
-
BubbleMonster almost 3 years
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.
-
Peter DeGlopper over 10 yearsAlso summarized on this docs page: docs.python.org/2/library/…
-
Lochemage over 10 yearsI'm not sure that this answers the OP's question though, he's asking
why
he gets the result that he is, why it returns the value of the last variable instead of just a true/false answer. -
Ali Gajani over 10 yearsI just told the answer :) Check again
-
kindall over 10 yearsHe's expecting
5 and 2
to return7
, I don't think he's asking why it doesn't return specifically true/false. -
dan04 over 7 yearsNow that Python has conditional expressions, you can think of
x and y
as a shorter way of writingy if x else x
. -
tdelaney over 7 years@dan04 that's mostly true and for most people its more clear than the booleans so should be preferred. But since
x
may need to be calculated twice, its not the right way to go ifx
is expensive or has side effects (functions or complicated expressions, etc... like perhapsexpensive_x() and expensive_y()
). But then its more clear to write anif
clause anyway. -
Juan Medina almost 3 yearsThe question is about the logical operators and not about how to print the values as string; also, I would rather say it's more about the sum rather than the string print as how the question is formulated