Du bist auf eine Gruppe von Mathematikerinnen und Mathematikern gestoßen, die auch Singer-Songwriter sind. Sie haben für jede ihrer Lieblingszahlen ein Lied geschrieben, und wie du dir vorstellen kannst, haben sie viele Lieblingszahlen (zum Beispiel 0 oder 73 oder 6174).
Du bist neugierig und möchtest das Lied zu deiner Lieblingszahl hören, aber bei so vielen Liedern kann es eine Weile dauern, bis du das richtige findest. Zum Glück haben sie ihre Lieder in einer Playlist organisiert, die nach dem Titel sortiert ist, wobei der Titel einfach die Zahl ist, um die es in dem Lied geht.
Du erkennst, dass du mit einer binären Suche schnell ein Lied findest, wenn du seinen Titel kennst.
Deine Aufgabe ist es, einen Algorithmus für die binäre Suche zu implementieren.
Ein Algorithmus für die binäre Suche findet ein Element in einer Liste, indem er sie wiederholt halbiert und nur die Hälfte behält, die das gesuchte Element enthält. Damit können wir die möglichen Positionen des gesuchten Elements schnell eingrenzen, bis wir es finden oder bis wir alle möglichen Positionen ausgeschlossen haben.
Die binäre Suche funktioniert nur, wenn eine Liste sortiert ist.
Der Algorithmus funktioniert so:
Hier ist ein Beispiel:
Angenommen, wir suchen die Zahl 23 in der folgenden sortierten Liste: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32] übrig bleibt.[23].Manchmal ist es notwendig, eine Ausnahme auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die angibt, wo die Fehlerquelle liegt. Das macht deinen Code lesbarer und hilft beim Debuggen erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ sein wird, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Nachricht angeben.
Diese Übung setzt voraus, dass du die raise-Anweisung verwendest, um einen ValueError zu „werfen“, wenn der gegebene Wert nicht im Array gefunden wird. Die Tests laufen nur durch, wenn du sowohl die exception mit raise auslöst als auch eine Nachricht mitgibst.
Um einen ValueError mit einer Nachricht auszulösen, schreibst du die Nachricht als Argument an den exception-Typ:
# example when value is not found in the array.
raise ValueError("value not in array")
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.