On Oct 28, 2010, at 11:08 AM, Ronald Oussoren wrote:
On 28 Oct, 2010, at 16:21, Dan Ross wrote:
I don't think this is Mac specific, but I wonder if someone could
explain why these two groups of code behave differently:
[code]
colors = ['red', 'green', 'blue', 'orange', 'fuscia', 'black',
'white']
list_of_matches = []
for x in colors:
if x == 'red' or 'green' or 'blue':
This parses as:
if x == ('red' or 'green' or blue'):
This would always lead to the if-test failing: ('red' or 'green' or
'blue') evaluates to True, and x != True. What's observed is the if-
test always passing... As the equality operator is higher-precedence
than boolean operators, and equal precedence operators group left-to-
right, the above parses as:
if (((x == 'red') or 'green') or 'blue'):
noting that non-empty strings (like 'green') evaluate as True in an if-
test, this will test if x == 'red', and if not, it will go on to
testing if 'green' evaluates to True (which it does), and so forth.
Dan, you could fix your code as:
if x == 'red' or x == 'green' or x == 'blue':
But this is better:
if x in ('red', 'green', 'blue'):
and this scales best:
good_colors = set(['red', 'green', 'blue'])
if x in good_colors:
Zach
Ronald
_______________________________________________
Pythonmac-SIG maillist - Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG
_______________________________________________
Pythonmac-SIG maillist - Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG