Reputation: 13
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
Reputation:
The or
operator takes two arguments, on its left and right sides, and performs the following logic:
- Evaluate the stuff on the left-hand side.
- If it is a truthy value (e.g,
bool(x) is True
, so it's not zero, an empty string, orNone
), return it and stop.- 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
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