# Writing tests for binary search (part 200f)

Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.

## Задача

Дан отсортированный список чисел `arr` и число `target`. Найти его индекс или вернуть `-1`, если элемента нет.

## Решение

```python
def binary_search(arr: list[int], target: int) -> int:
    lo, hi = 0, len(arr) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if arr[mid] == target:
            return mid
        if arr[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1


print(binary_search([1, 3, 5, 7, 9, 11], 7))
```

## Как это работает

На каждом шаге диапазон поиска сокращается вдвое: если середина меньше цели — ищем справа, иначе слева. Отсюда и логарифмическая скорость.

## Пример работы

```text
3
```

## Сложность

O(log n) по времени, O(1) по памяти.


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

**Читайте также:**

[вернуть](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [крайние](https://discuss.tchncs.de/post/65444068) · [случайной](https://kappa.lol/aE6rJG) · [элемента](https://snkrside.com/zmeena+orr+twitter?f=instapaper) · [сразу](https://paper.wf/dianasvoboda98log/hazeyhayley) · [минимум](https://team.writefreely.dev/oz8a0576/aiqu-yi-ruan-jian) · [while](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [решение](https://hey.xyz/posts/22h9g06ggkzv6177c2x) · [видно](https://team.writefreely.dev/oza70399/ejen-ali-porn) · [привычка](https://blogfreely.net/catherine-vasilyev70/anna-beggion-twitter-nude-photos-and-video-leaks-gallery) · [список](https://mariemoreau677.overblog.fr/2026/10/post-52.html) · [число](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/power-oshibki-mv9vq8g6.md) · [накроем](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/lyla-lush-porn-a7b1e7.pdf) · [середина](https://radicle.network/nodes/seed.pipapo.org/rad%3Az3rBeB2P3QX8d24oa8pZgRfdAcrwB/issues/9b5cc0211d6ca95fbb51d10073007a110a359495) · [arr[mid](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/gali-gool-of-leaks-f39239.pdf) · [Разберём](https://statics.pancake.vn/web-media-264/36/80/24/44/e19894d455e4cf66272195da3732efde80323af5a74118144fd11551.pdf) · [ошибки](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/t-rk-if-a-utanmaz-k-zlar-7df365.pdf) · [Задача](https://rentry.co/thickieyays-959248) · [Решение](https://wuchu-pub.com/uploads/20261016/83a16076099e7498c1e79d74a3959328.pdf) · [Сложность](https://kappa.lol/VcSaaM) · [кодом](https://yakihonne.com/article/naddr1qvzqqqr4gupzqq8c8tnxn6jnzv6uu4gpveh6s8w2ep8z27epj8w4jd2jucwwm7dkqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknzde5xu6nqdnx95un2d3s956xxcmr943xvetp95cnwcnzxyexxe3c8q6rv472rjg) · [добавлением](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/t-rk-anne-ensest-4c9cd8.pdf) · [случай](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [иначе](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/kiwikrg-e25a59.pdf) · [второй](https://discuss.tchncs.de/post/65439440) · [вдвое](https://sway.cloud.microsoft/GCtav7dsFfu1OwKy) · [логарифмическая](https://statics.pancake.vn/web-media-264/98/0b/4d/c7/fdb167d9543d2d04c0d52a28cec9de856cf5fde00a6f59f3e6f6763b.pdf)

