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

Reply via email to