def factorial(n): if n == 0: return 1 return n * factorial(n - 1) def i_factorial(n): product = 1 for k in range(1, n + 1): product *= k return product for k in range(10): print '{}! = {:6d}, {:6d}'.format(k, factorial(k), i_factorial(k)) maze = (0, None, (1, None, (2, None, (3, None, (), ()), (4, None, (), ())), (5, None, (6, None, (), ()), ())), (7, None, (8, None, (), ()), (9, None, (10, None, (11, 'cheese', (), ()), ()), ()))) def explore(node, depth=0): if not node: # empty tuple print ' <' * depth, 'Nothing found' return False print ' >' * depth, 'Checking node', node[0] if node[1]: # check for non-empty/non-None 2nd element print ' *' * depth, 'Found', node[1], 'at node', node[0] return node[:2] # return tag and element return explore(node[2], depth + 1) or explore(node[3], depth + 1) explore(maze)