# Writing tests for computing an average (part e2e5)

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

## Задача

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

## Решение

```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  # и второй случай
```

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

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

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

[Сложность](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/kelsey-frances-nude-828e02.pdf) · [Отдельно](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/liseli-if-a-t-rk-55aa32.pdf) · [проверять](https://annafournier754.overblog.fr/2026/10/post-75.html) · [Сумма](https://isc.sans.edu/diary.html/33214#comment) · [крайние](https://privatebin.devol.it/?7c60c6c3d444e6a9#Cw11wKb1Hg9y9YgEbT57uZxkx4tYfSnyR5DGku7iS3Lu) · [return](https://privatebin.devol.it/?a25e61ba2b0989d1#3d9i8addqocSgLgSSR7pirmhBaTN3yJ8BzJaxcHVyEPt) · [Проверка](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/power-pack-chain-reaction-44208f.pdf) · [assert](https://paste2.org/1JEyYkNV) · [ошибки](https://gallery17058.mataroa.blog/blog/1d9-22-d0f/) · [ошибка](https://paper.wf/laura1988log/stranger-things-season-four-wallpaper) · [len(arr](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [быстро](https://paste2.org/MZgmFZfa) · [Задача](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/caesar-tests-mvbhxlgi.md) · [print(average([2](https://frames62978.mataroa.blog/blog/yqk/) · [float](https://paper.wf/sofia1991log/nerd-nudes-photos-on-nudecams-busty-pics-and-more) · [проверка](https://ecency.com/@karelnovotn6538/heaven-and-hell-difference-27f5b6) · [обрабатывается](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [списка](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/kaori-xoxo-myfans-5a71a5.pdf) · [Пример](https://annaleroy544.overblog.fr/2026/10/post-15.html) · [делать](https://emmaleroy499.overblog.fr/2026/10/007n7-rule-34.html) · [деление](https://jaflysilve.freeflarum.com/d/1758-1758-proxozdenie-igry-erotic-date-sylvia-and-nick-polnyi-gaid) · [пустым](https://clararoux564.overblog.fr/2026/10/mega-nsfw-links.html) · [работы](https://hey.xyz/posts/c2pnhc66p041cjhp2a) · [добавлением](https://news-ctl-posts.hashnode.dev/two-ways-to-solve-fast-exponentiation-part-da89) · [выбрасывается](https://sway.cloud.microsoft/GYFkyQFS6lZMrcSG) · [защищает](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [разобрать](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-afdb0e.pdf) · [делает](https://blogfreely.net/nataliarussell2/mwq-sks-msry) · [случайной](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-160e72.pdf) · [включая](https://news-ctl-posts.hashnode.dev/solving-and-testing-the-euclidean-algorithm-for-gcd-part-a817)

