# Solving and testing computing an average

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

## Задача

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

## Решение

```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://hey.xyz/posts/1k6ax3hfxnanatfayqy) · [недопустимо](https://dev.to/devnote2319/keeping-link-blocks-stable-across-platforms-j6lgw-4jcc) · [return](https://dev.to/devnote2319/account-pools-for-multi-platform-posting-5122r-31bd) · [вызова](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-xnj6q-4bf2) · [глазами](https://rentry.org/cos-265562) · [пустым](https://visuals72500.mataroa.blog/blog/gojo-in-geto-fantasy-480p-jujutsu-kaisen-yaoi-animation/) · [решение](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/sebastian-reyes-porn-206380.pdf) · [второй](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/yanatopfit-d97d1a.pdf) · [количество](https://ledstore.in.ua/hadise+sex+sahneleri?f=instapaper) · [привычка](https://ymcatexasyg.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/outdoor-sex-session-with-jameliz-6c45db.pdf) · [Отдельно](https://dev.to/devnote2319/keeping-link-blocks-stable-across-platforms-ntgpa-1p8h) · [average(arr](https://www.sendspace.com/file/o3145nt4) · [делает](https://gofile.io/d/Y3vl9uv6) · [python](https://edu-notes-pages.pages.dev/min-max-razbor/) · [Задача](https://dev.to/devnote2319/idempotent-publishing-jobs-9r51p-7mk) · [проверка](https://mycommunitycalendars.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/megaskorea-e84279.pdf) · [пустой](https://leahlaurent390.overblog.fr/2026/11/boyst0246.html) · [видно](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/is-prime-oshibki-mwc1lych.md) · [сначала](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/11/event-7c920e.pdf) · [Сложность](https://kappa.lol/yRvFF9)

