How to use boolean 'and' in Python

PythonBoolean Logic

Python Problem Overview


In C# we can use && (boolean and) like this:

int i = 5;
int ii = 10;
if(i == 5 && ii == 10) {
	Console.WriteLine("i is 5, and ii is 10");
}
Console.ReadKey(true);
	

But try that with python:

i = 5
ii = 10
if i == 5 && ii == 10:
    print "i is 5 and ii is 10";      

I get an error: SyntaxError: invalid syntax

If I use a single &, at least I get no syntax error. How do I do a boolean && in Python?

Python Solutions


Solution 1 - Python

Try this:

i = 5
ii = 10
if i == 5 and ii == 10:
	  print "i is 5 and ii is 10"

Edit: Oh, and you dont need that semicolon on the last line (edit to remove it from my code).

Solution 2 - Python

As pointed out, "&" in python performs a bitwise and operation, just as it does in C#. and is the appropriate equivalent to the && operator.

Since we're dealing with booleans (i == 5 is True and ii == 10 is also True), you may wonder why this didn't either work anyway (True being treated as an integer quantity should still mean True & True is a True value), or throw an exception (eg. by forbidding bitwise operations on boolean types)

The reason is operator precedence. The "and" operator binds more loosely than ==, so the expression: "i==5 and ii==10" is equivalent to: "(i==5) and (ii==10)"

However, bitwise & has a higher precedence than "==" (since you wouldn't want expressions like "a & 0xff == ch" to mean "a & (0xff == ch)"), so the expression would actually be interpreted as:

if i == (5 & ii) == 10:

Which is using python's operator chaining to mean: does the valuee of ii anded with 5 equal both i and 10. Obviously this will never be true.

You would actually get (seemingly) the right answer if you had included brackets to force the precedence, so:

if (i==5) & (ii=10)

would cause the statement to be printed. It's the wrong thing to do, however - "&" has many different semantics to "and" - (precedence, short-cirtuiting, behaviour with integer arguments etc), so it's fortunate that you caught this here rather than being fooled till it produced less obvious bugs.

Solution 3 - Python

The correct operator to be used are the keywords 'or' and 'and', which in your example, the correct way to express this would be:

if i == 5 and ii == 10:
    print "i is 5 and ii is 10"

You can refer the details in the "Boolean Operations" section in the language reference.

Solution 4 - Python

You can also test them as a couple.

if (i,ii)==(5,10):
    print "i is 5 and ii is 10"

Solution 5 - Python

& is used for bit-wise comparison. use and instead. and btw, you don't need semicolon at the end of print statement.

Solution 6 - Python

In python, use and instead of && like this:

#!/usr/bin/python
foo = True;
bar = True;
if foo and bar:
    print "both are true";

This prints:

both are true

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPythonView Question on Stackoverflow
Solution 1 - PythonMizipzorView Answer on Stackoverflow
Solution 2 - PythonBrianView Answer on Stackoverflow
Solution 3 - PythonSeh Hui LeongView Answer on Stackoverflow
Solution 4 - PythonfulmicotonView Answer on Stackoverflow
Solution 5 - PythonSilentGhostView Answer on Stackoverflow
Solution 6 - PythonTim OttingerView Answer on Stackoverflow