python -> combinations of numbers and letters
Question: 
    #!/usr/bin/python
    import random
    lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    upper_a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    
    all = []
    all = " ".join("".join(lower_a) + "".join(upper_a) + "".join(num))
    all = all.split()
    x = 1
    c = 1
    while x < 10:
            y = []
            for i in range(c):
                    a = random.choice(all)
                    y.append(a)
            print "".join(y)
            x += 1
            c += 1
    

what i have now outputs something like the following:

    
    
    5
    hE
    HAy
    1kgy
    Pt6JM
    2pFuCb
    Jv5osaX
    5q8PwWAO
    SvHWRKfI5
    

how can i make it systematically go through every combination of letters
(upper and lowercase) for a given length, then add 1 to that length and repeat
the process?


Answer: It's best not to recreate functionality that is already in the standard
library.

Take a look at the standard library module "itertools".

Particularly the combinations(), permutations(), and product() functions.

    
    
    import itertools
    
    lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    upper_a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    
    all = []
    all = lower_a + upper_a + num
    
    for r in range(1, 3):
        for s in itertools.product(all, repeat=r):
             print ''.join(s)
    

If your version of Python is old you may not have access to these functions.
However if you take a look in the documentation for Python 2.6, you can see
how all of these functions can be implemented in Python. For instance, the
implementation of itertools.product is given as:

    
    
    def product(*args, **kwds):
        # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
        # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
        pools = map(tuple, args) * kwds.get('repeat', 1)
        result = [[]]
        for pool in pools:
            result = [x+[y] for x in result for y in pool]
        for prod in result:
            yield tuple(prod)
    

You could also try a recursive solution instead:

    
    
    lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    upper_a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    
    all = []
    all = lower_a + upper_a + num
    
    def recursive_product(myList, length, myString = ""):
        if length == 0:
            print myString
            return
        for c in myList:
            recursive_product(myList, length-1, myString + c)
    
    for r in range(1, 3):
        recursive_product(all, r)
    

