Está en la página 1de 4

Tema 6: Diccionarios, tuplas y clases

Algoritmia, Grado en Matemáticas, Universidad de Alicante Curso 2021–2022

1. Manejo básico de diccionarios

Tras resolver este conjunto de ejercicios, aprenderás a manejar diccionarios en Python.


En algunos ejercicios se utilizan tuplas y en otros clases para almacenar la información en
los diccionarios. Recuerda que es recomendable almacenar las funciones creadas durante la
práctica en un fichero diferente para poder reutilizarlas más adelante.

1.1. Reemplazar caracteres mediante diccionario

Crear manualmente un diccionario con reglas de reemplazo tal que así:

acentos = {
’á’:’a’,
’é’:’e’,
’í’:’i’,
’ó’:’o’,
’ú’:’u’
}

Después, crea una función reemplazar(cadena, diccionario) que devuelva una co-
pia de cadena en la cual todas las letras que aparecen en el diccionario como clave se han
reemplazado por su correspondiente valor de la forma más eficiente posible.

1.2. Traductor

Escribir un programa que cree un diccionario de traducción español-inglés. El programa


pedirá al usuario introducir por teclado las palabras en español e inglés separadas por dos
puntos, y cada pareja <palabra>:<traducción> separados por comas. El programa debe
crear un diccionario de Python con las palabras y sus traducciones. Después pedirá una frase
en español y utilizará el diccionario para traducirla palabra a palabra. Si una palabra de la frase
a traducir no está en el diccionario debe dejarla sin traducir.
Si el usuario introduce una pareja <palabra>:<traducción> varias veces pero con di-
ferentes traducciones, nos quedaremos con la última introducida.
Si una palabra en el texto tiene alguna mayúscula o algún símbolo de puntuación (como
punto, coma o similares) justo antes o después de ella (es decir, sin espacio entre la palabra y
el símbolo) la palabra se quedará sin traducir.

Matrices Página 1
1.3. Frecuencia de palabras

Ante un texto como el que sigue:

>>> texto = ’Es de resaltar que la ozonoterapia no tiene \


ningún tipo de validez para tratar enfermedades que la FDA \
admite que la ozonoterapia no tiene ningún uso médico real llegando a \
ser tóxico y perjudicial, y la existencia de estudios que relacionan\
al ozono con daños graves en los pulmones y la generación de \
radicales libres en sangre. Por todo ello se puede decir de manera \
argumentaba y basándonos en la evidencia científica que esta terapia \
carece de validez -independientemente de quien la practique- y además es\
peligrosa. De hecho, hay reportes que relacionan esta pseudoterapia con\
muchas muertes, anemia hemolítica del cuerpo de Heinz, muerte por \
insuficiencia renal progresiva derivada de anomalías electrolíticas, \
embolia gaseosa, ceguera, fallo cardíaco, colapso circulatorio y embolia\
cerebral.’

Crear una función cuenta_palabras(texto) implementada con diccionarios de Python,


como la que hemos visto en clase de teoría, que devuelva un diccionario conteniendo, para
cada palabra del texto pasado por argumento, su frecuencia de aparición. Es decir, si la palabra
“ningún” aparece 2 veces en el texto, la palabra “de” 10 veces, la palabra “no” dos veces, etc.,
el diccionario devuelto tendría el siguiente contenido:

>>> frec = cuenta\_palabras(texto)


>>> print(frec)

{
’ningun’: 2,
’de’: 10,
’no’: 2,
...
}

Recordad que para separar palabras hay que utilizar el método de cadena split().
En este ejercicio, a diferencia de clase de teoría, se deberán eliminar los símbolos de pun-
tuación (puntos, comas, dos puntos, guión...) y las palabras deben aparecer en el diccionario
en minúsculas y sin acentos (para esta última parte del ejercicio utilizad la función realizada en
el ejercicio anterior, ya que os servirá tanto para reemplazar caracteres, como para eliminarlos).

Matrices Página 2
1.4. Frecuencia de ‘bigramas’

Un bigrama es una secuencia de dos elementos adyacentes de una cadena. Tomemos en


este caso que un bigrama es la consecución de dos palabras. Crea, pues, una función similar al
ejercicio anterior llamada cuenta_bigramas que en vez de contar la frecuencia de aparición
de cada palabra, lo haga de cada pareja de palabras consecutivas. Es decir, si el texto empieza
con ‘Es de resaltar que la ozonoterapia no tiene’, contaremos los bigramas ‘es de’, ‘de resaltar’,
‘resaltar que’, ‘que la’, ‘la ozonoterapia’, ‘ozonoterapia no’ y ‘no tiene’. Utiliza tuplas para la clave
del diccionario, de forma que quede así:

>>> frec = cuenta_bigramas(texto)


>>> print(frec)

{
(’es’, ’de’): 1,
(’que’, ’la’): 3,
(’no’, ’tiene’): 2,
...
}

1.5. Gestión de usuarios

Mediante el uso de diccionarios y tuplas, crear un sistema que gestione usuarios y que
tenga el siguiente menú:

1. Añadir usuario
2. Eliminar usuario
3. Listar usuario
4. Acceder
5. Máxima edad
6. Salir

Los datos del usuario serán nombre completo, edad, contraseña e email. La primera opción
añadirá un usuario pidiendo todos los datos de éste; la segunda eliminará un usuario buscado
a partir de su email; la tercera opción imprimirá una lista de usuarios; la cuarta pedirá el email y
el password del usuario, y si éstos coinciden con algún usuario y contraseña introducidos pre-
viamente, deberá aparecer “Acceso autorizado”, o en caso contrario deberá aparecer “Acceso
denegado”; la opción 5 mostrará el nombre de la persona de más edad (si son dos o más con
la misma edad, mostrará el nombre de todas). El programa solo podrá salir en caso de escoger
la opción 6, con lo que se deben gestionar todos los errores y excepciones que puedan afectar
a la ejecución del programa (no hay que comprobar que el email sea correcto, por ejemplo).

Matrices Página 3
1.6. Gestión de usuarios implementado con clases

Vuelve a implementar el ejercicio anterior pero en vez de utilizar tuplas, ahora deberás
utilizar una clase “Usuario” para almacenar la información.

1.7. Métodos de la clase Usuario

Amplía la clase Usuario del ejercicio anterior implementando tres métodos: un método
es_menor que devuelva verdadero si una persona es menor de edad (menos de 18 años)
o falso en caso contrario, un método nombre_de_pila que devuelva el nombre de pila de un
usuario (el nombre de pila es la primera palabra del atributo donde se guarde el nombre en la
clase, es decir, que no hay nombres de pila compuestos), y un método datos_correo que
devuelva una tupla con el nombre reducido y el email (el nombre reducido solo contiene las dos
primeras palabras del campo nombre, es decir, que si es un nombre compuesto con apellidos
solo estará el nombre compuesto, y si es un nombre simple con apellidos entonces contendrá
el nombre y el primer apellido).

2. Manejo avanzado de clases

Estos ejercicios son especialmente difíciles. No te preocupes si te atascas. No dudes en


pedir ayuda al profesor si lo necesitas.

2.1. Diseña la gestión de una biblioteca con clases y menús

Deseamos gestionar una biblioteca. La biblioteca contiene libros que los socios pueden
tomar prestados un número de días. De cada libro nos interesa, al menos, su título, autor y año
de edición. De cada socio mantenemos su DNI, su nombre y su teléfono. Un socio puede tomar
prestados tres libros. Si un libro tarda más de 10 días en ser devuelto, el socio no podrá sacar
nuevos libros durante un período de tiempo: tres días de penalización por cada día de retraso.
Diseña un programa que permita dar de alta y baja libros y socios y llevar control de los
préstamos y devoluciones de los libros. Cuando un socio sea penalizado, el programa indicará
por pantalla hasta qué fecha está penalizado e impedirá que efectúe nuevos préstamos hasta
entonces.

Matrices Página 4

También podría gustarte