MULTI-METHOD PASSWORD GENERATOR

Objective:
Create a multi-method password generator that produces passwords using different randomization strategies (with/without replacement and shuffled sequences), while also demonstrating commonly used functions from Python’s random module.

How it works:

  1. Import randomness module: Load random to access utilities like choice, sample, shuffle, randint, uniform, and choices.

  2. Method 1 — choice + join (with replacement): Build a password by repeatedly selecting random characters from a predefined alphabet using random.choice and concatenating them until reaching the requested length.

  3. Method 2 — sample (unique chars, no replacement): Generate a password by taking longitud2 distinct characters via random.sample; then print a simple strength hint (“floja” if very short and without punctuation, otherwise “fuerte”).

  4. Method 3 — shuffle + slice: Convert the alphabet to a list, shuffle it in place with random.shuffle, join it back to a string, and take the first longitud3 characters as the password.

  5. Collect input per method: For each method, request the desired length with input(), cast to int, call the corresponding function, and print the resulting password.

  6. Show random utilities: Demonstrate randint, uniform, choice, sample, shuffle (note: returns None, so print the list after shuffling), and choices with weights and k to illustrate different randomness patterns.


# El objetivo es crear un generador de contraseñas de diferentes maneras
import random

# MÉTODO 1
def nueva_contraseña1(longitud1):
    caracteres = "abcdefghijklmñopqrstuvwxyz123456789¿?!¡."
    contraseña = ''.join(random.choice(caracteres) for _ in longitud1) 
    return contraseña 

longitud1 = int(input("Número de caractéres de la contraseña: "))
print(f"Tu contraseña es: {nueva_contraseña1(longitud1)}")

# MÉTODO 2
def nueva_contraseña2(longitud2):
    caracteres = "abcdefghijklmñopqrstuvwxyz123456789¿?!¡." 
    contraseña = ''.join(random.sample(caracteres,longitud2)) 
    if len(contraseña) < 6 and all(caracter not in contraseña for caracter in ("¿", "?", "!", "¡")): 
        print("Contraseña floja")
    else:
        print("Contraseña fuerte")
    return contraseña 

longitud2 = int(input("Número de caractéres de la contraseña: "))
print(f"Tu contraseña es: {nueva_contraseña2(longitud2)}")

# MÉTODO 3
def nueva_contraseña3(longitud3):
    caracteres = "abcdefghijklmñopqrstuvwxyz123456789¿?!¡."
    lista_caracteres = list(caracteres) 
    random.shuffle(lista_caracteres) 
    contraseña = ''.join(lista_caracteres)[:longitud3] 
    return contraseña

longitud3 = int(input("Número de caractéres de la contraseña: "))
print(f"Tu contraseña es: {nueva_contraseña3(longitud3)}")


# FUNCIONES import random más usadas:
# 1) randint(a, b):
print(random.randint(1, 20)) # Devuelve un número entero aleatorio entre a y b, ambos incluidos.

# 2) uniform(a, b)
print(random.uniform(1.5, 5.5)) # Genera un número flotante aleatorio entre a y b.

# 3) choice(seq)
opciones = ["rojo", "verde", "azul"]
print(random.choice(opciones))  # Selecciona un elemento aleatorio de una secuencia (lista, tupla, cadena, etc.).

# 4) sample(population, k)
numeros = [1, 2, 3, 4, 5]
print(random.sample(numeros, 3))  # Devuelve una lista de k elementos únicos seleccionados aleatoriamente de la población.

# 5) shuffle(list)
lista = [1, 2, 3, 4]
print(random.shuffle(lista)) # Mezcla los elementos de una lista en su lugar. ¡PERO NO ME DA LA LISTA!
print(lista)

# 6) choices(population, weights=None, k=1)
colores = ["rojo", "verde", "azul"]
print(random.choices(colores, weights=[10, 1, 1], k=2))  # Selecciona k elementos aleatorios de una población, con un peso dado.
Scroll al inicio