Verificar clave de acceso a cajero automático en Python

Al igual que existe un pequeño programa escrito en C++ que simula el acceso a un cajero, también hay un programa que hace lo mismo escrito en el lenguaje de programación Python pero con 23 líneas de código; Pocas ¿verdad?. Voy a ir explicando como funciona linea por linea.

clave = input("Ingrese la clave de acceso: ")

acert = 0
pos = len(clave)

for nm in range(pos):
    if pos >= 4:
        try:
            dig = float(clave[nm])
        except ValueError:
            print("La clave contiene caracteres!!")
            exit(0)

        if (dig % 2 == 0) and (nm == 3) or (nm == 4):
            acert += 1
    else:
        print("La clave debe ser de 4 digitos o mas")
        exit(0)

if acert == 2:
    print("Bienvenido a la plataforma del banco!!")
else:
    print("Lo sentimos, contraseña incorrecta!!")

A diferencia de la versión escrita en C++, aquí no vamos a importar ninguna biblioteca, cabecera o módulos por la sencilla razón que Python trae un montón de funciones ya incorporadas. Diferencia muy notable!

Creación, solicitud, ingreso y asignación de datos por teclado:
clave = input("Ingrese la clave de acceso: ")

acert = 0
pos = len(clave)

Se declaran 3 variables; la primera variable, llamada clave, almacena el dato ingresado por el usuario. En Python, el ingreso de datos desde el teclado se realiza utilizando la función input() y son datos son de tipo string; la segunda variable, llamada acert, es inicializada con el valor de cero (0) mientras que la tercera variable, llamada pos, almacena la longitud de la cadena ingresada por el usuario.

Bucle for, iterando sobre rangos:
for nm in range(pos):
    if pos >= 4:
       #Bloque de codigo del sentencia if
    else:
        print("La clave debe ser de 4 digitos o mas")
        exit(0)

El bucle for en Python es muy sencillo pero cumple con su deber a la perfección; en este caso va a iterar sobre un rango que va desde cero(0) hasta el valor almacenado en la variable pos pero sin incluir el último número del rango, es decir, si el valor de pos es 10, entonces el rango va a ir hasta 9.

La sentencia if verificará que el valor almacenado en la variable pos sea mayor o igual a 4; sin embargo, si no se cumple, se ejecutará la sentencia else, se mostrará al usuario un mensaje en donde se le indica el motivo del porque el programa finaliza y la función exit(0) finaliza el programa de forma temprana.

Sentencia try … except, evaluando y capturando excepciones:
try:
   dig = float(clave[nm])
except ValueError:
   print("La clave contiene caracteres!!")
   exit(0)

Este fragmento de código marca una diferencia importante comparado con la versión escrita con C++ ya que se usa las sentencias try … except en lugar de usar sentencias if anidadas. En la sentencia try se crea una nueva variable llamada dig que almacenará un valor de tipo float, este valor se obtiene convirtiendo(casting) el valor que se encuentra en el índice nm usando la función float().

Si la conversión falla, se va a levantar una excepción de tipo ValueError, la sentencia except se encarga del manejo de dicha excepción, imprime un mensaje para el usuario y la función exit(0) finaliza el programa de forma temprana.

Sentencia if, verificando la igualdad y acceso a la plataforma:
if acert == 2:
    print("Bienvenido a la plataforma del banco!!")
else:
    print("Lo sentimos, contraseña incorrecta!!")

Por último, comprobamos que que el valor de acert sea igual a 2 para informarle al usuario si está o no está autorizado para acceder a la plataforma. Hay que recordar que el valor de acert solo se obtiene si los valores en la posición 3 y 4 de la variable clave son pares.

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *