Egy csapat matematikusra bukkantál, akik egyben énekes-dalszerzők is. Minden kedvenc számukhoz írtak egy dalt, és ahogy sejtheted, rengeteg kedvenc számuk van (például a 0, a 73 vagy a 6174).
Kíváncsi vagy, milyen dal szól a kedvenc számodról, de ennyi dal között eltartana egy ideig, mire megtalálod a megfelelőt. Szerencsére a dalaikat egy lejátszási listába szedték, a címük szerint rendezve, a cím pedig egyszerűen az a szám, amelyről a dal szól.
Rájössz, hogy bináris kereséssel gyorsan megtalálhatod a dalt, ha ismered a címét.
A feladatod, hogy megvalósítsd a bináris keresés algoritmusát.
A bináris keresés úgy keres meg egy elemet egy listában, hogy ismételten kettéosztja, és csak azt a felét tartja meg, amelyik tartalmazza a keresett elemet. Segítségével gyorsan leszűkíthetjük a keresett elem lehetséges helyeit, amíg meg nem találjuk, vagy amíg az összes lehetséges helyet ki nem zártuk.
A bináris keresés csak akkor működik, ha a lista rendezve van.
Az algoritmus így néz ki:
Íme egy példa:
Tegyük fel, hogy a 23-as számot keressük a következő rendezett listában: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32] marad.[23].Néha szükség van arra, hogy kivételt dobj. Ilyenkor mindig adj meg egy értelmes hibaüzenetet, amely jelzi, mi a hiba forrása. Ettől olvashatóbb lesz a kódod, és a hibakeresést is nagyban megkönnyíti. Ha tudod, hogy a hiba forrása egy bizonyos típusú, dönthetsz úgy, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg értelmes üzenetet.
Ez a feladat megköveteli, hogy a raise utasítással „dobj” egy ValueError-t, ha a megadott érték nem található a tömbben. A tesztek csak akkor futnak át, ha raise-elsz egy exception-t, és üzenetet is fűzöl hozzá.
Ha üzenettel együtt szeretnél ValueError-t dobni, add meg az üzenetet a exception típus argumentumaként:
# example when value is not found in the array.
raise ValueError("value not in array")
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.