Nivel: Principiante
Tema: Listas, validación de entradas, bucles, casos borde, tests con pytest
Objetivo: Implementar tu propia versión de “máximo” sin usar max(), manejando listas vacías y entradas inválidas de forma segura.
Enunciado
Crea una función llamada encontrar_maximo(lista) que:
- Reciba un valor
lista. - Si
listaesNone, devuelvaNone. - Si
listano es una lista (list), lanceTypeError. - Si la lista está vacía, devuelva
None. - Devuelva el valor máximo contenido en la lista.
- No uses la función integrada
max().
Para este reto, asume que la lista contiene valores comparables entre sí (por ejemplo, todos números).
Ejemplos
encontrar_maximo([1, 3, 2])→3encontrar_maximo([-5, -1, -10])→-1encontrar_maximo([])→Noneencontrar_maximo(None)→Noneencontrar_maximo("123")→ TypeError
Pistas
- Empieza suponiendo que el primer elemento es el máximo.
- Recorre la lista comparando cada valor con el máximo actual.
- Actualiza el máximo cuando encuentres un valor mayor.
- Maneja los casos borde antes del bucle.
Solución explicada (paso a paso)
- Si la entrada es
None, no hay máximo posible →None. - Si no es una lista, lanzamos
TypeErrorpara evitar comportamientos inesperados. - Si la lista está vacía, devolvemos
None. - Inicializamos el máximo con el primer elemento.
- Recorremos el resto de la lista y actualizamos el máximo cuando corresponde.
- Al final del recorrido, devolvemos el valor máximo encontrado.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Soportar tuplas: aceptar
listotuple - Validar tipos internos: lanzar error si hay valores no comparables
- Devolver índice y valor:
(indice, valor_maximo) - Implementar mínimo y máximo en una sola pasada
Lo que aprendiste
- Cómo recorrer listas y mantener un estado
- Cómo manejar casos borde de forma explícita
- Por qué evitar funciones “mágicas” al aprender fundamentos
- Cómo validar comportamiento con tests automatizados
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Continúa con Reto #4 — Frecuencia de caracteres en una cadena para seguir practicando lógica con strings y diccionarios.