Enunciado y solución de ejercicios resueltos en Python: programación funcional (estructurada) y uso de excepciones (captura de errores). Se incluye la descarga del código fuente completo de los ejercicios en Python.
- Ejercicio resuelto Python 1: programación funcional (estructurada).
- Ejercicio resuelto Python 2: excepciones (captura de errores).
- Descarga de los ficheros Python con los ejercicios resueltos.
Ejercicio resuelto Python 1: programación funcional (estructurada)
Enunciado ejercicio 1
Desarrolla un programa en Python que realice las siguientes acciones:
- El programa debe solicitar al usuario por consola que introduzca una frase.
- El programa debe solicitar al usuario por consola que introduzca una palabra o carácter a buscar.
- El programa debe solicitar al usuario por consola que introduzca una palabra o carácter a reemplazar.
- Se realizará una función llamada ReemplazarCadena a la que se le pasen tres argumentos strings con los siguientes nombres:
- La función ReemplazarCadena debe devolver la cadena de texto con todas las apariciones de palReemplazar reemplazadas por palNueva.
El programa mostrará por pantalla la frase resultante con el reemplazo de todas las coincidencias de palReemplazar en cadena, reemplazadas por palNueva.
Por otro lado, a continuación, se definirá una lista en el programa llamada listaNumeros, con los siguientes valores:
[“uno”, “dos”, “tres”, “cuatro”, “cinco”, «seis», «siete», «ocho», «nueve», «diez»]
Se le aplicará la función ReemplazarCadena, quitándole el carácter «o» y aplicando la función ReemplazarCadena sobre dicha lista con un iterador de orden superior (map). La aplicación mostrará el resultado por pantalla.
Pista: para la segunda parte del ejercicio, modifica la función ReemplazarCadena, añadiendo al argumento palReemplazar el valor por defecto «o» y al argumento palNueva el valor «» (vacío). De esta forma la función ReemplazarCadena te servirá para ambos casos.
Solución ejercicio 1 en Python
La solución propuesta al ejercicio 1, como ejemplo de uso de programación estructurada (funcional) y de iteradores de orden superior (map), podría ser:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# Definimos la función ReemplazarCadena con tres argumentos # cadena: frase completa # palReemplazar: palabra o carácter a buscar para reemplazar en la cadena # palNueva: palabra o carácter con el que se reemplazarán las ocurrencias encontradas de palReemplazar def ReemplazarCadena(cadena, palReemplazar="o", palNueva=""): cadenaReemp = cadena.replace(palReemplazar, palNueva) return cadenaReemp # Pedimos al usuario que introduzca una frase fraseIntroducida = input("Introduzca una frase: ") # Pedimos al usuario que introduzca una palabra/carácter para buscar palBuscar = input("Introduzca la palabra/carácter a buscar: ") # Pedimos al usuario que introduzca una palabra/carácter para reemplazar la palabra anterior si aparece palReemplazar = input("Introduzca la palabra/carácter con el que se reemplazará: ") # Usamos la función ReemplazarCadena cadenaReemplazada = ReemplazarCadena(cadena=fraseIntroducida, palReemplazar=palBuscar, palNueva=palReemplazar) # Mostramos el resultado por consola print (f"La cadena con "{palBuscar}" reemplazado por "{palReemplazar}" es: {cadenaReemplazada}") # Segunda parte del ejercio # Definimos una lista listaNumeros = ["uno", "dos", "tres", "cuatro", "cinco"] # Usamos el iterador de orden superior map para ejecuar la función ReemplazarCadena sobre # todos los elementos de la lista # Dado que en la función ReemplazarCadena hemos establecido el valor por defecto para # palReemplazar a "o" y para palNueva a "", quitará todos los caracteres "o" que # encuentre en cada elemento de la lista resultado = map(ReemplazarCadena, listaNumeros) listaResultado = list(resultado) # Mostramos por pantalla la lista original print(listaNumeros) # Mostramos por pantalla la lista con la ejecución de la función ReemplazarCadena # para todos los elementos de la lista, iterando con map print(listaResultado) |
Ejemplo de ejecución del ejercicio 1 en Python
La compilación del ejercicio 1, introduciendo los siguientes valores:
Introduzca una frase: Esto es una prueba de reemplazo de palabra
Introduzca la palabra/carácter a buscar: a
Introduzca la palabra/carácter con el que se reemplazará:
En este ejemplo de ejecución, buscaremos el carácter «a» en la frase introducida y lo reemplazaremos por «» (vacío).
Hacemos una segunda ejecución del programa, con los siguientes valores introducidos:
Introduzca una frase: Segunda prueba de reemplazo en Python
Introduzca la palabra/carácter a buscar: reemplazo
Introduzca la palabra/carácter con el que se reemplazará: sustitución
En este caso, reemplazará todas las veces que aparezca la palabra «reemplazo» por la palabra «sustitución».
La aplicación Python también devolverá la lista de elementos original y la lista de elementos sin el carácter «o»:
[‘uno’, ‘dos’, ‘tres’, ‘cuatro’, ‘cinco’]
[‘un’, ‘ds’, ‘tres’, ‘cuatr’, ‘cinc’]

Ejercicio resuelto Python 2: excepciones (captura de errores)
Enunciado ejercicio 2
Dada la clase Persona, con la siguiente definición y redefinición del método __str__:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Definimos la clase Persona, que no hereda de otras (object) class Persona (object): # Definimos el constructor, creando los atributos en su definición def __init__(self, DNI="", nombre="", apellidos=""): self.DNI = DNI self.nombre = nombre self.apellidos = apellidos # Redefinimos el método __str__ para personalizar # los datos devueltos de los atributos de la clase def __str__(self): return "DNI: {}, Nombre: {}, Apellidos: {}, Edad: {}".format( self.DNI, self.nombre, self.apellidos) |
Se pide que se instancie la clase Persona, pasándole unos valores a sus atributos DNI, nombre y apellidos. El programa, en el constructor de la clase Persona, debe comprobar si se ha introducido un dato diferente de string (texto) para los atributos nombre y apellidos, si es así, mostrará un error.
El alumno debe realizar una captura de excepciones, creando una clase propia para personalizar el texto de la excepción. Si en el atributo nombre o en el atributo apellidos se introduce un tipo de datos diferente de string, forzará la excepción correspondiente, mostrando al usuario un texto personalizado.
Solución ejercicio 2 en Python
Una posible solución al ejercicio Python de ejemplo de captura de errores (excepciones), en el constructor de una clase, podría ser:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# Definimos una clase Error que heredará de la clase Exception # para mostrar un mensaje de error personalizado class Error(Exception): # Definimos el constructor de la clase, con el atributo "error" def __init__(self, error): self.error = error # Redefinimos el método estándar __str__ para mostrar el texto pasado en el atributo "error" def __str__(self): return repr(self.error) # Definimos la clase Persona, que no hereda de otra class Persona (object): # Definimos el constructor, con los atributos DNI, nombre y apellidos def __init__(self, DNI="", nombre="", apellidos=""): self.DNI = DNI # Iniciamos la posible captura de errores try: # Comprobamos si el tipo de datos pasado para los atributos # nombre y apellidos es distinto de str (string) # Si es distinto, generamos la excepción con el texto personalizado if type(nombre) != str or type(apellidos) != str: raise Error("Tipo de dato no válido para el nombre o los apellidos") else: # Si el tipo es str, no se producirá error y se continuará la ejecución del programa self.nombre = nombre self.apellidos = apellidos except Error as ex: self.nombre = "" self.apellidos = "" # Mostramos por consola el mensaje error personalizado print("Error al introducir el nombre o los apellidos:", ex.error) def __str__(self): return "DNI: {}, Nombre: {}, Apellidos: {}".format( self.DNI, self.nombre, self.apellidos) # Instanciamos la clase Persona de forma correcta (sin error) per = Persona(DNI="5252525K", nombre="Alonso", apellidos="Proyecto A") # Mostramos por pantalla los valores de los atributos (se usará el método __str__) print("Persona: ", per) # Provocamos error pasando el nombre como un número per = Persona(DNI="5252525K", nombre=1, apellidos="Pérez Díaz") # Mostramos por pantalla los valores de los atributos (se usará el método __str__) print("Persona: ", per) |
Ejemplo de ejecución del ejercicio 2 en Python
Al ejecutar el programa, podremos comprobar que devolverá la persona instanciada con sus atributos DNI, nombre y apellidos, de forma correcta y, a continuación, también devolverá un error porque se ha introducido el nombre en tipo de datos numérico:
Persona: DNI: 5252525K, Nombre: Alonso, Apellidos: Proyecto A
Error al introducir el nombre o los apellidos: Tipo de dato no válido para el nombre o los apellidos
Persona: DNI: 5252525K, Nombre: , Apellidos:

Descarga de los ficheros Python con los ejercicios resueltos
En el siguiente enlace os proporcionamos la descarga del código fuente completo en Python con la solución de los dos ejercicios: