On Jul 15, 12:37 pm, Christian Heimes <li...@cheimes.de> wrote: > pdpi wrote: > > On Jul 15, 12:08 am, Christian Heimes <li...@cheimes.de> wrote: > >> Chris Rebert wrote: > >>> Using the xor bitwise operator is also an option: > >>> bool(x) ^ bool(y) > >> I prefer something like: > > >> bool(a) + bool(b) == 1 > > >> It works even for multiple tests (super xor): > > >> if bool(a) + bool(b) + bool(c) + bool(d) != 1: > >> raise ValueError("Exactly one of a, b, c and d must be true") > > >> Christian > > > "if bool(a) + bool(b) + bool(c) + bool(d) != 1:" is not equivalent to > > xor. 1 xor 1 xor 1 = 1 xor (1 xor 1) = 1 xor 0 = 1 (or = (1 xor 1) xor > > 1 = 0 xor 1 = 1 if you assicate to the left) > > I'm well aware of the fact that I've described something differently. > 'xor' can be explained as 'check if exactly one element of two elements > is true'. My algorithms describes a super xor, aka 'check if exactly one > element of n elements is true'. > > Christian
Well, I just wouldn't call it a "super xor" then, when "unicity test" works much better -- especially as an alternative to an actual xor without any specification to the actual intended functionality except the exception text. -- http://mail.python.org/mailman/listinfo/python-list