Boletín 207. Listas
En este boletín comenzaremos a utilizar una de las estructuras de datos que estudiamos en la unidad 1: las listas.
Revisa el apartado listas de la unidad.
Ejercicios
- Para cada función, lanza las excepciones que sean necesarias.
- Para cada función, realiza su documentación utilizando DocString.
- Captura todas las excepciones que puedan ocurrir durante el transcurso del script.
- Cuando se muestra un menú, cada opción tendrá asociada una letra. Según la letra introducida por el usuario, se realizará una operación u otra. Si se selecciona una letra que no está en el menú deberá mostrarse por pantalla un error al usuario.
- No debes implementar las anotaciones de tipos de las funciones. Tan solo se indica en los enunciados para documentar las funciones.
Ejercicio 1. Crea un script en Python en el que se ingresen las notas de alumnos. Ve guardando todas las notas que estén entre 0 y 10 en una lista. Cuando el usuario introduzca la palabra "fin", no se pedirán más notas. Al finalizar el ingreso de notas muestra por pantalla la media de todas las notas.
Ejercicio 2. Escribe una función en Python solo_pares(lista: list) -> list que reciba una lista de números y devuelva una nueva lista que contenga solo los números pares de la lista original.
Ejercicio 3. Escribe una función en Python eliminar_duplicados(lista: list) -> list que reciba una lista con elementos duplicados y devuelva una nueva lista sin duplicados, manteniendo el orden original.
Ejercicio 4. Escribe una función en Python contar_longitudes(lista: list) -> list que reciba una lista de palabras y devuelva una lista con la longitud de cada palabra.
Ejercicio 5. Escribe una función en Python coger_comunes(lista1: list, lista2: list) -> list que reciba dos listas y devuelva una lista con los elementos comunes. Si hay elementos repetidos varias veces en las dos listas, en la nueva debe aparecer sólo una vez.
Ejercicio 6. Escribe una función en Python piramide(longitud: int) que imprima una pirámide de números. Esta recibe un entero que indica la longitud de la pirámide.
Por ejemplo si introducimos la longitud 5, se imprimirá:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Utiliza la función
range().
Ejercicio 7. La búsqueda binaria es un algoritmo eficiente para encontrar un elemento en una lista ordenada. En vez de buscar elemento por elemento de forma secuencial (como hace la búsqueda lineal), la búsqueda binaria reduce a la mitad el espacio de búsqueda en cada paso. Funciona comparando el elemento objetivo con el elemento central de la lista:
- Si el elemento central es el objetivo, ya se encontró y el proceso termina.
- Si el objetivo es menor que el elemento central, la búsqueda continúa en la mitad izquierda de la lista.
- Si el objetivo es mayor que el elemento central, la búsqueda continúa en la mitad derecha de la lista.
Este proceso se repite de forma iterativa hasta encontrar el elemento o hasta que no quede más lista que buscar (en ese caso, el objetivo no está presente).
Escribe una función en Python buscar(lista: list, objetivo) que implemente el algoritmo de búsqueda binaria que devuelva el índice del objetivo o None en caso de no encontrarse el valor objetivo.
# Prueba con estos datos:
lista_ordenada = [1, 3, 5, 7, 9, 11, 13, 15]
objetivo = 7
# salida esperada: 3 (el índice de 7 en la lista es 3)
objetivo = 4
# salida esperada: None (4 no está en la lista)
Ejercicio 8. Crea un script en Python que pida las notas de un examen de los alumnos de una clase para procesarlos. Todas las notas tienen que ir almacenándose en una lista. Muestra un menú que se muestre continuamente hasta que el usuario seleccione la opción salir. Las entradas del menú son:
a) Añadir notab) Ver mediac) Ver número de aprobadosd) Ver máxima notae) Eliminar nota→ Primero debes mostrar un menú donde muestres para cada índice de la lista, su nota. El usuario indicará el índice de la nota a eliminar.f) Salir
Para poder realizar cada acción del menú, implementa las siguientes funciones:
añadir_nota(lista: list[float], nota: float).- Comprueba que la lista sea una lista, si no lanza excepción
TypeError. - Si la nota es un valor inválido, lanza la excepción
ValueError.
- Comprueba que la lista sea una lista, si no lanza excepción
mostrar_notas(lista: list[float])- Comprueba que la lista sea una lista, si no lanza excepción
TypeError. - Debe mostrarse en este formato:
índice: nota. Ejemplo:0 : nota1
1 : nota2
...
- Comprueba que la lista sea una lista, si no lanza excepción
media_notas(lista: list[float]) -> float- Comprueba que la lista sea una lista, si no lanza excepción
TypeError.
- Comprueba que la lista sea una lista, si no lanza excepción
numero_aprobados(lista: list[float]) -> int- Comprueba que la lista sea una lista, si no lanza excepción
TypeError.
- Comprueba que la lista sea una lista, si no lanza excepción
maxima_nota(lista: list[float]) -> float- Comprueba que la lista sea una lista, si no lanza excepción
TypeError.
- Comprueba que la lista sea una lista, si no lanza excepción
eliminar_nota(lista: list[float], indice: int)- Comprueba que la lista sea una lista, si no lanza excepción
TypeError. - Si el índice no es válido lanza excepción
ValueError.
- Comprueba que la lista sea una lista, si no lanza excepción
IMPORTANTE: No utilices para realizar estas funciones las funciones del sistema
max,min, etc. realiza este cálculo iterando sobre la lista.
Ejercicio 9. Se va a realizar un sorteo en el que puede haber un número diferente de ganadores a partir de unas rifas numeradas entre 0001 y 9999. Escribe un script en Python que reciba por teclado el número de premios disponibles e imprima los números premiados con el formato de 4 dígitos.
Para obtener un número al azar utiliza el siguiente código:
import random
...
numero_aleatorio = random.randint(1, 9999)
Ejercicio 10. El algoritmo de ordenación que se describe a continuación permite ordenar una lista de forma simple pero ineficiente para listas pequeñas. Funciona comparando elementos adyacentes en la lista e intercambiándolos si están en el orden incorrecto (es decir, si el primer elemento es mayor que el segundo). Este proceso se repite varias veces hasta que toda la lista esté ordenada. Es decir, se realizan varias pasadas sobre la lista para ordenarla hasta que no se produzca ningún intercambio de posiciones.
Escribe una función en Python ordenar(lista: list) -> list que implemente el algoritmo de ordenación descrito anteriormente para una lista de números de menor a mayor.
Aquí tenemos un ejemplo:
# Prueba con estos datos:
lista = [64, 34, 25, 12, 22, 11, 90]
# salida esperada: [11, 12, 22, 25, 34, 64, 90]
Comprueba que la lista sea una lista de números. Si no, lanza la excepción pertinente.