On Fri, 30 Jan 2004 01:06:55 GMT in comp.lang.python, "Elaine Jackson" wrote:

Sorry to take so long but I wasn't sure what a "unit test" was (the other guy's

post clarified it). Tell me if this isn't what you're looking for:

falsies=[0,0.0,[],(),{},'',None]

truies=[49,3.14,[1,2,3],(4,5,6),{7:8,9:10},'nonempty']

def demo(A,B):

print "If A is ",A

print "and B is ",B

print "then (A[0] and B[0]) or (A[1] and B[1]) or (A[2] and B[2]) = ",

print (A[0] and B[0]) or (A[1] and B[1]) or (A[2] and B[2])

A=[]

from random import randint

for i in range(3):

A.append(bool(randint(0,1)))

B=truies[0:3]

demo(A,B)

A=[False,False,False]

B=falsies[0:3]

demo(A,B)

print "I would have liked this to be B[2] = ",B[2]

(snip)

Do you mean that the expression should return the last element in B if

all elements in A are false? If all subexpressions before the last are

false, the whole conditional reduces to:

A[-1] and B[-1]

So simply force (a copy of) A[-1] to always be true. Instead of

rewriting demo, I'll cheat by modifying the call:

A=[False, False, False]

B=[0, 0.0, []]

demo(A[:-1]+[True], B)

If A is [False, False, True]

and B is [0, 0.0, []]

then (A[0] and B[0]) or (A[1] and B[1]) or (A[2] and B[2]) = []

[False, False, False]

For complete generality, you should also consider the case where

len(A) != len(B). Truncate the longer list, or extend the shorter?

Does it matter which list is shorter? Or forget the whole mess and

raise an exception? There are lots of reasonable possibilities, but

they won't all lead to the same result for certain input values.

You're in charge of this project, you decide :)

Dave