16 - Práctica 3: criptografía con Python
Lección 16 del curso Python Nivel Intermedio.
Tabla de contenido
Introducción
En la lección anterior vimos las principales funciones y métodos para el procesamiento de sets, con lo cual ya estamos listos para poner en práctica las herramientas aprendidas hasta el momento.
En esta práctica implementaremos un programa capaz de encriptar o cifrar un archivo de texto, para posteriormente decodificarlo, usando varios de los conceptos aprendidos hasta el momento, en especial el uso de diccionarios y la lectura y almacenamiento de archivos.
Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
El problema a resolver
Dado un texto implementar un programa que tome cada palabra y la codifique con un número. Además implementar el proceso inverso, la decodificación, es decir tomar cada número y convertirlo a una palabra.
Requerimientos
- El programa debe leer el texto original a partir de un archivo .txt
- Una vez leído el texto, el programa debe crear un diccionario (
word_to_num
) que codifique cada palabra como un número - El número asignado a cada palabra debe estar asociado a su frecuencia: palabras comúnes deben ser codificadas con menos dígitos, palabras poco comúnes serán codificadas con más dígitos.
- Crear un diccionario inverso (
num_to_word
) que permita decodificar cada palabra - Codificar el texto original usando el diccionario
word_to_num
y almacenar el resultado en un archivo .txt - Decodificar el texto codificado usando el diccionario
num_to_word
y almacenar el resultado en un archivo .txt
Funciones auxiliares
Implementaremos 4 funciones auxiliares:
leer_texto
, que permitirá introducir laruta
del archivo original (quijote.txt
) y realizar la lectura del mismo. A la salida retornará una lista con cada una de las palabras del texto (que almacenaremos en la variablepalabras
calcular_frecuencias
, que tomará como argumento de entrada la variablepalabras
y retornará a la salida un diccionario con la frecuencia de aparición de cada palabra (que almacenaremos en la variablefrecuencias
)ordenar_diccionario
, que tomará como argumento de entrada la variablefrecuencias
y retornará a la salida un diccionario pero organizado de manera descendente (frecs_sorted
): de las palabras más comunes a las menos comunesdiccionarios_cod_decod
, que tomará como argumento de entrada la variablefrecs_sorted
y retornará los diccionariosword_to_num
(para la codificación) ynum_to_word
(para la decodificación)
Codificación
Leeremos el archivo original (quijote.txt
) línea por línea, y simultáneamente codificaremos palabra por palabra usando word_to_num
, con lo cual obtendremos el archivo quijote_codificado.txt
que corresponderá al archivo original encriptado.
Decodificación
Y finalmente, leeremos el archivo codificado (quijote_codificado.txt
), y lo decodificaremos palabra por palabra usando num_to_word
, y así obtendremos el archivo con el texto decodificado (quijote_decodificado.txt
) que será exactamente igual al archivo original (quijote.txt
)
Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
Conclusión
Perfecto, con este ejemplo de criptografía ya hemos puesto en práctica los diccionarios y herramientas como la lectura y almacenamiento de archivos para la solución de un problema real.
Así que ya estamos listos para entrar a la última sección del curso, en donde veremos herramientas para el procesamiento avanzado de strings.
En particular, en la próxima lección comenzaremos viendo varios métodos para el procesamiento avanzado de strings.