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