On 01/08/2014 14:28, Steven D'Aprano wrote:
On Fri, 01 Aug 2014 12:45:12 +0000, Alex van der Spek wrote:With a dict like so: cond = {'a': 1, 'b': 1, 'c': 1, 'A': 0, 'B', 0, 'C':0} how would you make a boolean expression like this: bool = (('a' == 1) & ('A' == 0) | ('b' == 1) & ('B' == 0) | ('c' == 1) & ('C' == 0))That's False. It's always False, because 'a' does not equal 1, etc. Also, you're using bitwise operators & and | rather than boolean operators. Finally, you are shadowing the built-in bool() type, which is probably a bad idea. In the first case, I think you mean cond['a'] == 1 rather than just 'a'==1; in the second case, the bool operators are called "and" and "or"; and in the third case, there are many equally good names for a generic boolean flag, like "flag". Putting those together, I think you probably mean something like this: flag = ( (cond['a'] == 1 and cond['A'] == 0) or (cond['b'] == 1 and cond['B'] == 0) or (cond['c'] == 1 and cond['C'] == 0) ) which can be simplified to: flag = any( cond[c] == 1 and cond[c.upper()] for c in ['a', 'b', 'c'] )
Shouldn't that be cond[c.upper()] == 0 ? -- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence -- https://mail.python.org/mailman/listinfo/python-list
