Deste de caras com um grupo de matemáticos que também são cantores e compositores. Escreveram uma canção para cada um dos seus números preferidos e, como podes imaginar, têm imensos números preferidos (como o 0, o 73 ou o 6174).
Estás curioso por ouvir a canção do teu número preferido. No entanto, com tantas canções para percorrer, encontrar a canção certa podia demorar bastante tempo. Por sorte, organizaram as canções numa lista de reprodução ordenada pelo título, que é simplesmente o número sobre o qual a canção fala.
Dás-te conta de que podes usar um algoritmo de pesquisa binária para encontrar rapidamente uma canção a partir do título.
A tua tarefa é implementar um algoritmo de pesquisa binária.
Um algoritmo de pesquisa binária encontra um elemento numa lista dividindo-a repetidamente ao meio e ficando apenas com a metade que contém o elemento que procuramos. Permite-nos reduzir rapidamente as possíveis localizações do nosso elemento até o encontrarmos, ou até eliminarmos todas as localizações possíveis.
A pesquisa binária só funciona quando a lista está ordenada.
O algoritmo funciona assim:
Eis um exemplo:
Digamos que procuramos o número 23 na seguinte lista ordenada: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32].[23].Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa para indicar qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso a depurar. Em situações em que sabes que a origem do erro é de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para «lançar» um ValueError quando o valor indicado não é encontrado no array. Os testes só passam se tanto fizeres raise da exception como incluíres uma mensagem com ela.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:
# example when value is not found in the array.
raise ValueError("value not in array")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.