Here is what the program does: We would like to generate passwords (or some other random string), but we want to be able to specify a template. For example, we may want to specify that each password is 7 lowercase characters. In this case we would use the template 'aaaaaaa'. Suppose we wanted a password that looks like a Victorian (Victoria, Australia) number plate, we would specify the template 'AAA-999', in other words, three random letters followed by a hyphen followed by three random digits. Finally, we may want to generate a simple password that is easy to remember by making it pronouncable - so we generate it using the following template: 'Cvcvc' The 'c' will be replaced by a consonant and the 'v' by a vowel, giving us something like, maybe, 'Gamir'.
Here is the program:
import string import random vowels_upper = 'AEIOU' vowels_lower = 'aeiou' consonants_upper = 'BCDFGHJKLMNPQRSTVWXYZ' consonants_lower = 'bcdfghjklmnpqrstvwxyz' alphanumeric = string.letters + string.digits recognize = { 'A': string.ascii_uppercase, 'a': string.ascii_lowercase, 'C': consonants_upper, 'c': consonants_lower, 'V': vowels_upper, 'v': vowels_lower, 'd': string.digits, 'x': alphanumeric} def create_password(template): return ''.join([random.choice(recognize[ch]) if ch in recognize else ch for ch in template]) if __name__ == '__main__': for i in range(5): print create_password('AAA-ddd') for i in range(5): print create_password('Cvcvc')
When we run the above program, we get the following output:
MOI-138 KMQ-882 UCH-536 LBK-734 MGA-798 Wewof Roqug Colud Gokix Berid
That's quite a lot of power for what is essentially one line of code.