Why can't I xor strings?
Phil Frost
indigo at bitglue.com
Fri Oct 8 16:44:09 EDT 2004
^ is the bitwise xor operator. Performing bitwise operations on strings
doesn't make much sense, so it's invalid. You can define a logical xor
function like so:
xor = lambda p, q: (p and not q) or (not p and q)
or equivalently:
xor = lambda p, q: bool(p) != bool(q)
On Fri, Oct 08, 2004 at 04:19:22PM -0400, dataangel wrote:
> I wrote a function to compare whether two strings are "similar" because
> I'm using python to make a small text adventure engine and I want to it
> to be responsive to slight mispellings, like "inevtory" and the like. To
> save time the first thing my function does is check if I'm comparing an
> empty vs. a non-empty string, because they are to be never considered
> similar. Right now I have to write out the check like this:
>
> if str1 and str2:
> if not str1 or not str2:
> return 0
>
> Because python won't let me do str1 ^ str2. Why does this only work for
> numbers? Just treat empty strings as 0 and nonempty as 1.
>
> Regardless of whether this is the best implementation for detecting if
> two strings are similar, I don't see why xor for strings shouldn't be
> supported. Am I missing something? Inparticular, I think it'd be cool to
> have "xor" as opposed to "^". The carrot would return the resulting
> value, while "xor" would act like and/or do and return the one that was
> true (if any).
More information about the Python-list
mailing list