Saltar a contenido

Contraseña

Escriba una función que retorne True si una contraseña particular es suficientemente segura y False en caso contrario. Una contraseña se considera suficientemente segura si contiene al menos una letra mayúscula, al menos una minúscula, al menos un dígito, al menos un caracter de puntuación (punto, coma, punto y coma o dos puntos), y debe tener al menos longitud \(8\).

Solución
# Para verificar si tiene una mayuscula o minuscula, o si corresponde a un digito,
# utilizamos la funcion ord(string) que nos entrega el codigo ASCII respectivo. 

def letra_mayuscula(caracter):
    # 65 corresponde a "A" y 90 a "Z". Se incluye la "Ñ"
    return (ord(caracter) >= 65 and ord(caracter) <= 90) or caracter == "Ñ"

def letra_minuscula(caracter):
    # 97 corresponde a "a" y 122 a "z". Se inlcuye la "ñ"
    return (ord(caracter) >= 97 and ord(caracter) <= 122) or caracter == 'ñ'

def digito(caracter):
    # 48 corresponde a "0" y 57 a "9"
    return ord(caracter) >= 48 and ord(caracter) <= 57 

def puntuacion(caracter):
    # Simplemente verificamos si se encuentra dentro del string con los caracteres de puntuacion
    return caracter in ",.;:"

def segura(password):
    # Esta propuesta analiza caracter por caracter y revisa si cumple los requisitos
    # Podemos revisar inmediatamente el largo, para evitar recorrer el string
    if len(password) < 8:
        return False
    else: # Si la contraseña es de al menos 8 caracteres, continuamos...
        # Inicializamos con variables falsas
        mayu = False
        minu = False
        digi = False
        punt = False
        # Recorremos los caracteres de la contraseña
        for c in password:
            # Aplicamos OR para saber si es que posee o no el criterio correspondiente
            mayu = mayu or letra_mayuscula(c)
            minu = minu or letra_minuscula(c)
            digi = digi or digito(c)
            punt = punt or puntuacion(c)
        # Luego de revisar todos los criterios, aplicamos AND a nuestras variables
        return mayu and minu and digi and punt
# Entrada
contra = input("Ingrese su contraseña: ")
# Salida
if segura(contra):
    print("Su contraseña es segura")
else:
    print("Su contraseña no es segura")

Modifique la función anterior para que reciba como parámetro adicional la contraseña anterior. Agregue como condición para ser una contraseña segura que la nueva contraseña no debe ser similar a la anterior con \(3\) o menos caracteres de tolerancia.