# Writing tests for computing an average (part cdaa)

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

## Задача

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

## Решение

```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://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [Найти](https://yakihonne.com/article/naddr1qvzqqqr4gupzq68cp2hn57wckkemmmeyq7k5ksmtg6jlz999rfnmz8c3wpe9ruxvqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknzvpcvguxge3394nrsv3k956rwc3k943xzcnr956nqen9vverydtxv56nyg7cmt6) · [крайние](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/hijab-polos-toket-bulet-ngewe-b42e02.pdf) · [raise](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/tailson-xvideos-89f28c.pdf) · [len(arr](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [нескольких](https://radicle.network/nodes/seed.cielago.xyz/rad%3Az4LyqQ1vnh9iTsjZGEYPe5mrbyaLS/issues/9d6e464a7024561092a248f85c8347bc69c9adf0) · [затем](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/raperin-y-lmaz-c38d0e.pdf) · [времени](https://discuss.tchncs.de/post/65440369) · [Задача](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/ruby-next-door-nudes-7943d8.pdf) · [среднее](https://montage65414.mataroa.blog/blog/kourtney-love-hot-colombian-teacher-video/) · [случайной](https://paper.wf/petrabraun96log/qmobile-phones-2025-prices-specs-reviews-pakistan-official-models) · [average(arr](https://drop.xtrafrancyz.net/selif/je4vt0xy13.pdf) · [float](https://statics.pancake.vn/web-media-264/86/47/c5/c0/cfe207264a3bee34228b8f5f465cbe31900af1250704b39451f04477.pdf) · [недопустимо](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Такой](https://radicle.network/nodes/seed.cielago.xyz/rad%3Az3orNFtL4c1kLGKxjTEf3Rxt1TBcA/issues/d3a7208efb440f51772cd52ca4cc12fe16f2f5ce) · [минимум](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/caesar-tests-mvcci6pp.md) · [ошибка](https://paper.wf/laura1985log/anaalee9-onlyfans-leaked-exclusive-nude-content) · [чисел](https://gal66354.carrd.co/) · [деление](https://discuss.tchncs.de/post/65440587) · [sum(arr](https://hey.xyz/posts/wm9y7bz6wy3s7ammh1) · [поэтому](https://rentry.co/erotikmovi-710356) · [проверок](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/desiree-garcia-leaks-b3af55.pdf) · [проверять](https://kappa.lol/7ditQF)

