二分探索アルゴリズムを実装してください。
二分探索アルゴリズムは、配列を半分に分割することを繰り返し、探している値が含まれる半分だけを残すことで、配列の中から目的の値を見つけ出します。 これにより、目的の値が見つかるまで、あるいは候補となる場所がすべてなくなるまで、その値がありうる場所をすばやく絞り込んでいけます。
二分探索は、配列がソートされているときにだけ使えます。
アルゴリズムは次のようなものです。
例を見てみましょう。
次のソート済みの配列から、数値23を探すとしましょう:[4, 8, 12, 16, 23, 28, 32]。
[23, 28, 32]が残ります。[23]。例外を発生させる必要がある場合もあります。そのときは、エラーの原因が何であるかを示す意味のあるエラーメッセージを必ず含めるようにしましょう。こうするとコードが読みやすくなり、デバッグもずっと楽になります。エラーの原因がある特定の型であるとわかっている場合は、組み込みのエラータイプの中から1つを選んで発生させることもできますが、その場合でも意味のあるメッセージを含めるようにしましょう。
この演習では、与えられた値が配列の中に見つからないときに、raise文を使ってValueErrorを「投げる」必要があります。exceptionをraiseし、それにメッセージを添えたときだけ、テストは通ります。
メッセージ付きでValueErrorを発生させるには、メッセージをexception型の引数として書きます。
# example when value is not found in the array.
raise ValueError("value not in array")