The following code outputs False, when according to the Python Order of Operations it should output True (the order should be in -> ==, not the other way around). Why is == coming before in?
y = "33" "3" in y == True
The existing answers give helpful advice that you shouldn't compare booleans to
True because it's redundant. However, none of the answers actually answer the root question: "why does
"3" in y == True evaluate to
That question was answered in a comment by juanpa.arrivillaga:
Also, this is an instance of operator chaining, since
inboth count as comparison operators. So this is evaluated as
('3' in y) and (y == True)
In Python, comparison operators can be chained. For example, if you want to check that
d are increasing, you can write
a < b < c < d instead of
a < b and b < c and c < d. Similarly, you can check that they are all equal with
a == b == c == d.
Chained comparisons are described in the Python documentation here:
Comparisons can be chained arbitrarily, e.g.,
x < y <= zis equivalent to
x < y and y <= z, except that
yis evaluated only once (but in both cases
zis not evaluated at all when
x < yis found to be false).