Te has topado con un grupo de matemáticos que también son cantautores. Han escrito una canción para cada uno de sus números favoritos y, como puedes imaginar, tienen muchísimos números favoritos (como el 0, el 73 o el 6174).
Sientes curiosidad por escuchar la canción de tu número favorito, pero con tantas canciones entre las que rebuscar, encontrar la canción adecuada podría llevarte un buen rato. Por suerte, han organizado sus canciones en una lista de reproducción ordenada por el título, que no es más que el número sobre el que trata la canción.
Te das cuenta de que puedes usar un algoritmo de búsqueda binaria para encontrar rápidamente una canción a partir de su título.
Tu tarea consiste en implementar un algoritmo de búsqueda binaria.
Un algoritmo de búsqueda binaria encuentra un elemento en un array dividiéndolo repetidamente por la mitad y conservando solo la mitad que contiene el elemento que buscamos. Nos permite acotar rápidamente las posibles ubicaciones de nuestro elemento hasta que lo encontremos o hasta que hayamos descartado todas las posibles ubicaciones.
La búsqueda binaria solo funciona cuando un array está ordenado.
El algoritmo funciona así:
Aquí tienes un ejemplo:
Supongamos que buscamos el número 23 en el siguiente array ordenado: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32].[23].A veces es necesario lanzar una excepción. Cuando lo hagas, siempre deberías incluir un mensaje de error significativo para indicar cuál es el origen del error. Esto hace que tu código sea más legible y ayuda enormemente a la hora de depurar. En situaciones en las que sabes que el origen del error será de un tipo concreto, puedes optar por lanzar uno de los tipos de error incorporados, pero aun así deberías incluir un mensaje significativo.
Este ejercicio en concreto requiere que uses la instrucción raise para «lanzar» un ValueError cuando el valor dado no se encuentre dentro del array. Las pruebas solo pasarán si tanto haces raise de la exception como incluyes un mensaje con ella.
Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:
# example when value is not found in the array.
raise ValueError("value not in array")
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.