#!/usr/bin/env python import string from time import time from itertools import chain from random import seed, choice, sample def mkpasswd(length=8, digits=2, upper=2, lower=2): """Create a random password Create a random password with the specified length and no. of digit, upper and lower case letters. :param length: Maximum no. of characters in the password :type length: int :param digits: Minimum no. of digits in the password :type digits: int :param upper: Minimum no. of upper case letters in the password :type upper: int :param lower: Minimum no. of lower case letters in the password :type lower: int :returns: A random password with the above constaints :rtype: str """ seed(time()) lowercase = string.lowercase.translate(None, "o") uppercase = string.uppercase.translate(None, "O") letters = "{0:s}{1:s}".format(lowercase, uppercase) password = list( chain( (choice(uppercase) for _ in range(upper)), (choice(lowercase) for _ in range(lower)), (choice(string.digits) for _ in range(digits)), (choice(letters) for _ in range((length - digits - upper - lower))) ) ) return "".join(sample(password, len(password))) print mkpasswd() print mkpasswd(12) print mkpasswd(digits=3) print mkpasswd(12, upper=4)