Python - Ejercicio resuelto con Pokémon

Python – Ejercicio resuelto: laboratorio de profesor Oak

En este post te mostraré un ejercicio resuelto con Python que cubre varias cosas como recursividad, manejo de diccionarios, listas, etcétera.

Vamos a ver cómo resolver cada apartado de este problema propuesto. Igualmente con éste puedes practicar tus habilidades con el lenguaje.

Ejercicio

Es un ejercicio del laboratorio del profesor Oak que dice así:

Te encuentras trabajando como practicante en el laboratorio del Profesor Oak y te ha
asignado la tarea de analizar el inventario de Pokemones. Él tiene un archivo que
contiene los siguientes datos:

  • name: nombre del Pokémon
  • id: número de identificación correspondiente al Pokémon
  • sp_attack: puntos de ataque del Pokémon
  • sp_defense: puntos de defensa del Pokémon
  • speed: puntos de velocidad del Pokémon
  • ability: lista de habilidades del Pokémon

Un ejemplo del contenido del archivo y el orden de las columnas se puede observar a continuación, es un archivo CSV:

Para trabajar esta información el profesor Oak te pide pasar los datos de los Pokemones a un diccionario que contiene otro diccionario con la siguiente estructura:

  • Clave: ID del Pokémon
  • Valor: Diccionario con la siguiente estructura:
    • Clave: “Nombre”; Valor: Nombre del Pokémon
    • Clave: “puntos_ataque”; Valor: Sp_attack del Pokémon
    • Clave: “puntos_defensa”; Valor: Sp_defense del Pokémon
    • Clave: “puntos_velocidad”; Valor: Speed del Pokémon
    • Clave: “habilidad”; Valor: Ability del Pokémon

Aquí un ejemplo del diccionario:

Importante: el ID del pokémon, los puntos de ataque, puntos de defensa y puntos de velocidad deben ser un entero. El nombre y habilidad deben estar en formato string.

Problema 1: diccionario

El profesor Oak le solicita que cree el diccionario a partir del archivo pokemon.csv. Recuerde que el diccionario debe tener la estructura previamente descrita.

Simplemente leemos un CSV, usamos split y luego convertimos la cadena a un número.

Problema 2: buscar dato de Pokémon

El profesor Oak necesita consultar frecuentemente datos de los Pokémon que tiene en su laboratorio para intercambiar con otros investigadores.

Por ese motivo, él le solicita que genere una función que a partir del ID del Pokémon y un valor de búsqueda devuelva como resultado el dato para el Pokémon.

Los valores de entrada son el id, el valor y el diccionario de Pokemones. El valor de salida debería ser el dato solicitado para el Pokémon con ese ID.

Pokémon más rápido: problema 3

El profesor Oak requiere conocer el Pokémon más rápido que tiene en su laboratorio para enviarlo a una competencia en el torneo Pokémon de la ciudad Johto.

Él le solicita que cree un algoritmo de búsqueda con complejidad O(n) que retorne una tupla con el nombre del Pokémon y el puntaje de velocidad.

Lo que hacemos aquí es recorrer todo el diccionario y buscar el Pokémon.

Ordenar Pokemones por nombre: problema 4

El profesor Oak necesita ordenar el nombre de los Pokemones de forma ascendente para publicar la lista en la página web del laboratorio.

Él le solicita que cree un algoritmo de ordenamiento con complejidad O(n log n), que retorne una lista de tuplas que contenga el nombre del Pokémon y el ID del mismo.

En este caso usamos el algoritmo de merge sort para ordenar la lista, ya que la complejidad lo requiere así.

Problema 5: búsqueda binaria

En tres semanas el profesor Oak necesita entregar Pokemones a los nuevos entrenadores que llegan a su laboratorio.

En esta ocasión va a realizar un sorteo con los nombres de los Pokemones publicados en la página web del laboratorio.

Luego del sorteo necesita conocer la habilidad que el Pokémon tiene para instruir a los entrenadores, por ese motivo le solicita que cree un algoritmo de búsqueda binaria con complejidad O(log n), que reciba como parámetro el nombre del Pokémon a buscar y retorne los datos del Pokémon en el diccionario.

Si el nombre del Pokémon no es encontrado debe retornar el valor de -1 como llave y el texto “No encontrado” como valor.

En este caso simplemente usamos la búsqueda binaria que ya hemos visto anteriormente, solo que adaptada para este ejercicio.

Poniendo todo junto

Python - Ejercicio resuelto con Pokémon
Python – Ejercicio resuelto con Pokémon

El código completo queda como se ve a continuación. Ya te dije que es un ejercicio resuelto de Python, por ello es que es muy específico en su solicitud:

En las últimas líneas te muestro cómo usar los métodos. Por cierto, si quieres la listas de pokemones puedes verla aquí.

Te dejo más tutoriales y códigos de Python en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario