← Назад к вопросам
Среднее арифметическое
2.0 Middle🔥 171 комментариев
#Теория тестирования
Условие
Напишите функцию, которая вычисляет среднее арифметическое элементов массива.
Пример
Вход: [10, 20, 30, 40, 50] Выход: 30.0
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Анализ задачи
Нужно вычислить среднее арифметическое элементов массива. Формула:
Average = (сумма всех элементов) / (количество элементов)
Задача проста на первый взгляд, но требует учитывать граничные случаи.
Решение 1: Простое вычисление
def average(arr):
if not arr:
return 0 # Или raise ValueError
total = 0
for num in arr:
total += num
return total / len(arr)
Пояснение:
- Сначала проверяем что массив не пуст
- Суммируем все элементы
- Делим на количество элементов
Пример:
[10, 20, 30, 40, 50]
сумма = 150
количество = 5
среднее = 150 / 5 = 30.0
Решение 2: С использованием встроенных функций
def average(arr):
if not arr:
return 0
return sum(arr) / len(arr)
Более читаемо и эффективно в Python.
Решение 3: С обработкой ошибок
def average(arr):
if not arr:
raise ValueError("Массив не может быть пуст")
if not all(isinstance(x, (int, float)) for x in arr):
raise TypeError("Все элементы должны быть числами")
return sum(arr) / len(arr)
Преимущества:
- Явная обработка ошибок
- Проверка типов
Решение 4: Java реализация
public class ArrayAverage {
public static double average(int[] arr) {
if (arr.length == 0) {
throw new IllegalArgumentException("Массив не может быть пуст");
}
int sum = 0;
for (int num : arr) {
sum += num;
}
return (double) sum / arr.length;
}
}
Решение 5: JavaScript
function average(arr) {
if (arr.length === 0) return 0;
return arr.reduce((sum, num) => sum + num) / arr.length;
}
Важные моменты
1. Деление на ноль:
# Неправильно
def average(arr):
return sum(arr) / len(arr) # Ошибка если arr пуст!
# Правильно
def average(arr):
if not arr:
return 0 # или raise exception
return sum(arr) / len(arr)
2. Целое число vs дробь:
# Результат всегда float
print(average([10, 20, 30])) # 20.0 (float)
3. Переполнение памяти (для больших массивов):
def average_safe(arr):
if not arr:
return 0
# Считаем среднее по мере итерации (избегаем overflow)
mean = 0
for i, num in enumerate(arr):
mean += (num - mean) / (i + 1)
return mean
Тестовые случаи
assert average([10, 20, 30, 40, 50]) == 30.0
assert average([1]) == 1.0
assert average([5, 5, 5, 5]) == 5.0
assert average([-10, 0, 10]) == 0.0
assert average([1.5, 2.5, 3.0]) == 2.333...
assert average([]) == 0 # или exception
assert average([100, 200]) == 150.0
assert average([-1, -2, -3]) == -2.0
Граничные случаи
- Пустой массив - должен вернуть 0 или выбросить исключение
- Один элемент - должен вернуть это же число
- Отрицательные числа - должны учитываться
- Дроби - результат должен быть float
- Очень большие числа - проверить переполнение
- Очень длинные массивы - проверить производительность
Сложность
| Аспект | Значение |
|---|---|
| Временная сложность | O(n) |
| Пространственная сложность | O(1) |
| Стабильность | Даже без пустого массива |
Рекомендация для QA Automation
При тестировании:
- Базовые случаи - простые массивы с положительными числами
- Граничные случаи - пустой, один элемент, отрицательные
- Типы данных - целые, дроби
- Точность - сравнивайте с небольшим допуском (epsilon)
- Производительность - на массивах 10^7 элементов
На собеседовании
- Начните с простого решения
- Упомяните обработку пустого массива
- Обсудите типы данных (int vs float)
- Объясните сложность O(n)
- Предложите оптимизацию для больших данных (Welford's algorithm)