On 2008-07-10, ssecorp <[EMAIL PROTECTED]> wrote: > > def validate(placed): > student = round(random.random()*401) > if student in placed: > validate(placed) > else: > placed.append(student) > return student, placed > > def pair(incompatibles, placed): > student1, placed = validate(placed) > student2, placed = validate(placed) > pair1 = (student1,student2) > pair2 = (student2,student1) > if (pair1 or pair2) in incompatibles: > placed.remove(student1) > placed.remove(student2) > pair(incompatibles, placed) > else: > return pair1, placed > > def generateList(dormlist,incompatibles, placed, rooms): > if len(dormlist) < (rooms + 1): > room, placed = pair(incompatibles, placed) > dormlist.append(room) > generateList(dormlist,incompatibles,placed,rooms) > else: > return dormlist
In each of the above functions, the 'if' part has no 'return', while the 'else' part has. You should add a 'return' statement at every exit from the function. If you don't expect the program to get at some point, you should add a check like raise ValueError("This shouldn't happen") you'd be surprised how often 'impossible' things do happen (and writing such a statement costs less than a minute, and saves you many hours debugging). Some people so as far as demanding that there is exactly 1 return statement, namely at the bottom of the function. While I don't favor that approach, it may help you in always returning a value. BTW: For performance and readability, you may want to replace your direct recursion with iterations. Albert -- http://mail.python.org/mailman/listinfo/python-list