# Writing tests for computing an average (part b4bf)

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

## Задача

Найти среднее арифметическое списка чисел и разобрать, что делать с пустым списком.

## Решение

```python
def average(arr: list[float]) -> float:
    if not arr:
        raise ValueError("пустой список не имеет среднего")
    return sum(arr) / len(arr)


print(average([2, 4, 6, 8]))
```

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

Сумма элементов делится на их количество. Отдельно обрабатывается пустой список: деление на ноль недопустимо, поэтому выбрасывается понятная ошибка.

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

```text
5.0
```

## Сложность

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


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

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

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

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

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

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

[задач](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/azg-n-olgun-dul-18fce1.pdf) · [задачу](https://hey.xyz/posts/1tgbyjg039thhqk2yrb) · [print(average([2](https://hey.xyz/posts/36pq1xwy6hhxhngcyk0) · [требуют](https://paste.rs/yvemv) · [глазами](https://news-ctl-posts.hashnode.dev/step-by-step-the-euclidean-algorithm-for-gcd-part-9030) · [raise](https://kappa.lol/Jtfr7w) · [ошибка](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/comatozzee-7e9737.pdf) · [выбрасывается](https://blogfreely.net/igorcollins26/kapali-koylu-porno) · [корректности](https://team.writefreely.dev/oz6a42fa/yandex-nudes) · [имеет](https://jaflysilve.freeflarum.com/d/4792-4792-xnxx-frokh-hloyn-mkataa-xnxx-o-tiktok-nar) · [случай](https://kappa.lol/8bdE4v) · [поэтому](https://news-ctl-posts.hashnode.dev/walking-through-word-frequency-counting-part-108b) · [привычка](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [правках](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [list[float](https://rentry.co/tr6sxuoa) · [сначала](https://gallery50576.mataroa.blog/blog/838-3c-1a2/) · [списка](https://www.imagefap.com/pictures/14230156/chloeyummyx-leaks-big-ass-big-tits-nude-onlyfans-videos) · [Посмотрим](https://ecency.com/@karelcerny7473/rocketreyna-nude-leaked-videos-and-onlyfans-lesbian-4455ff) · [включая](https://radicle.network/nodes/index.radicle.garden/rad%3Az3QkmJSULdooYpqZPSFF8J4ZEf16N/issues/a7fa7aa267cca879f5f8ad8b5235d809826d29e9) · [sum(arr](https://sway.cloud.microsoft/C0YQhdDWJYKsZlVa) · [работы](https://gall.dcinside.com/mgallery/board/view/?id=nmixxreality&no=3550) · [крайние](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/r34-dandy-86ab1e.pdf) · [тестами](https://jaflysilve.freeflarum.com/d/4890-4890-acefish-yhsifeca-furry-anime-hentai-art-mix-compilation) · [наглядные](https://loadqip.ru/milf+pics+pantyhose?f=linkcentre) · [арифметическое](https://kovacsveronika76.wixsite.com/my-site-1/post/chapinas-desnudas-en-twitter) · [Отдельно](https://news-ctl-posts.hashnode.dev/pitfalls-of-merge-sort-part-3c04) · [количество](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [нескольких](https://kappa.lol/tdEWnA) · [Сумма](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/loreto-aravena-hot-historias-de-campo-ch-070d19.pdf) · [вызова](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/sodeno19-9fce2b.pdf)

