# Solving and testing binary search

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

## Задача

Дан отсортированный список чисел `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://gellaryforum.freeflarum.com/d/28023-28023-turk-twitter-seks) · [проверок](https://kappa.lol/zweKzD) · [список](https://yakihonne.com/article/naddr1qvzqqqr4gupzpdw9lj473qj23meztkjd5yyky2v93ayg3tasl8k6chrvkugvhvn6qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknwepcxdjrzvnz956xydnz956xxvrr95unwwrx95crwcmrxp3nzv34xf3nx304xrn) · [поиска](https://writefreely.ethibox.fr/ozbd9454/brazzers-altyazili) · [python](https://davidh3323.wixsite.com/my-site-1/post/livu-if%C5%9Fa) · [диапазон](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/julio-jose-ip-cam-aab20d.pdf) · [Сложность](https://kappa.lol/xdukuS) · [проверки](https://drop.xtrafrancyz.net/selif/u48s2zc7zf.pdf) · [Найти](https://curated68128.mataroa.blog/blog/kawahagitei-hentai-porn-gallery-free-sex-art-and-comics/) · [target](https://drop.xtrafrancyz.net/selif/oe575m1064.pdf) · [скорость](https://gallery84929.mataroa.blog/blog/sakso-turk-ifsa/) · [вернуть](https://blogfreely.net/catherine-vasilyev70/nyk-s-wdy) · [O(log](https://mandersen69.wixsite.com/my-site-1/post/naturist-photos-collection--karie-skinny-diving--beach-nudity-gal) · [решение](https://news-ctl-posts.hashnode.dev/solving-and-testing-anagram-checking) · [сокращается](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/secret-stars-mila-9bf8f2.pdf) · [assert](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/global-weather-data-a887f6.pdf) · [защищает](https://yakihonne.com/article/naddr1qvzqqqr4gupzq4ufgn4807w9vma63wksq7p0rj2nnyclk3hr4lv45zn2xkna2rw8qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknvdnpxc6x2ceh94jrjcnx956rxepk943rwef3956xxdpexyen2cfjv5ux27ncfav) · [ломается](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/dainty-rascal-masturbating-e8597d.pdf) · [задаче](https://blogfreely.net/nathannazarov26/caroliny-dreher-nudes-fotos-vazadas-da-novinha-gostosa) · [Отсюда](https://juliahorvat89.wixsite.com/my-site-1/post/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0%D1%81%D1%8C-%D0%B2-%D0%BF%D0%B5%D1%80%D0%B8%D1%81%D0%BA%D0%BE%D0%BF%D0%B5-%D1%88%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D1%86%D0%B0-%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82-%D0%B3%D1%80%D1%83%D0%B4%D1%8C-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD) · [работает](https://hey.xyz/posts/1951y92paj0nqn14eh0) · [быстро](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [добавим](https://pen.absturztau.be/oz39c89f/sks-rby-s-wdyh) · [крайние](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Проверка](https://radicle.network/nodes/index.radicle.garden/rad%3AzaHurRB5t7PMjuEiZSSdS6rKWtMo/issues/769783025c5c183ffa7dd26fdb62fe73f96e3339) · [привычка](https://inkwell2677.bearblog.dev/) · [чисел](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg)

