Una forma fácil de obtener passwords puede ser usar el método choice del módulo random.
Para ello se puede usar el módulo string para poder obtener una cadena de texto que incluya todas las letras mayúsculas y minúsculas y los símbolos. Esta cadena se ha de convertir en una lista usando la función list().
El siguiente código almacena en la variable caracteres esta lista.
import string
caracteres = list(string.ascii_letters+string.punctuation)
El siguiente paso es obtener una cantidad determinada de caracteres de forma aleatoria para formar el password. Esto se puede conseguir usando el método choice de random el cual selecciona un elemento aleatorio de la lista que se le pase como argumento.
import random
password = ''
password = password + random.choice(caracteres)
Con un bucle, se pueden obtener tantos caracteres aleatorios como sean necesarios para componer el password e incluso tantos passwords como sea necesario.
El siguiente ejemplo, muestra diez passwords de ocho caracteres cada uno, seleccionados aleatoriamente. Para cambiar el número de passwords o la cantidad de caracteres solo hay que modificar los valores de las variables num_passwords y cant_caracteres.
import string
import random
caracteres = list(string.ascii_letters+string.punctuation)
num_passwords = 10
cant_caracteres = 8
print('%s passwords de %s caracteres.' %(num_passwords,cant_caracteres))
for x in range(num_passwords):
password = ''
for y in range(cant_caracteres):
password = password + random.choice(caracteres)
print('Password %s: %s' %(x+1,password))
También se puede usar random.choices() que devuelve una lista de caracteres seleccionados de una lista. El primer argumento que se le pasa es la lista desde donde seleccionar los caracteres y el argumento k es la cantidad de caracteres a seleccionar de la misma.
import string
import random
caracteres = list(string.ascii_letters+string.punctuation)
password = ''.join(random.choices(caracteres,k=8))
print(password)