UnknownMessenger
UnknownMessenger

Reputation: 13

How do boolean operators work in 'if' conditions?

I am currently new to Python and am trying to run a few simple lines of code. I cannot understand how Python is evaluating this syntax after the if statement. Any explanations will be appreciated.

number = int(raw_input("Enter number : "))

if number == (1 or 2 or 3):
    print "Match"
else:
    print "No match"

Only the integer 1 yield a positive result and any other numbers including 2 and 3 go through the else branch. Can the conditions be stated as the following only?:

if number == 1 or number == 2 or number == 3:

Thank you.

Upvotes: 1

Views: 194

Answers (3)

user149341
user149341

Reputation:

The or operator takes two arguments, on its left and right sides, and performs the following logic:

  1. Evaluate the stuff on the left-hand side.
  2. If it is a truthy value (e.g, bool(x) is True, so it's not zero, an empty string, or None), return it and stop.
  3. Otherwise, evaluate the stuff on the right-hand side and return that.

As such, 1 or 2 or 3 is simply 1, so your expression turns into:

if number == (1):

If you actually mean number == 1 or number == 2 or number == 3, or number in (1, 2, 3), you'll need to say that.

(Incidentally: The and operator works the same way, except step 2 returns if the left-hand-side is falsey.)

Upvotes: 2

Makoto
Makoto

Reputation: 106508

Python has boolean values, such as True and False, and it also has falsy values, such as any empty list, tuple, or dictionary, an empty string, 0, and None. Truthy values are the opposite of that, namely anything that's defined.

Python's or evaluates and short-circuts on the first element that returns a truthy value.

So, the expression (1 or 2 or 3) is going to return 1.

If you want to compare against all elements, then you're looking for the in keyword:

if number in (1, 2, 3):
    # Do logic

Upvotes: 3

tom10
tom10

Reputation: 69242

You probably want:

if number in (1, 2, 3):

Upvotes: 6

Related Questions