def make_combos(curr, *rest): if rest: rest = make_combos(*rest) else: rest = [""] for y in rest: for x in curr: yield y + x def password_generator(seeds=DEFAULT_CHAR_SET, minlen=1, maxlen=8): chars = [seeds]*minlen for i in range(minlen, maxlen+1): for elem in make_combos(*chars): yield elem chars.append(seeds) # insert the code for PasswordGenerator here def test_combos(): for pwd in password_generator(): yield pwd def test_generator(): for elem in PasswordGenerator(): yield elem if __name__ == "__main__": for test_type in [test_combos, test_generator]: for i in range(3): test = test_type().next start = time.time() for j in range(1000000): test() # change to "print test()" if you want output print time.time() - start, print