У меня есть задача: <br/> Напишите классы MinValue, MaxValue, MeanValue и MedianValue, которые вычисляют минимальное, максимальное, среднее арифметическое и медиану последовательности целых чисел. <br/> <br/> Создайте экземпляры этих классов без аргументов. Реализуйте метод add, который будет добавлять число в последовательность, чтобы оно учитывалось при вычислении результата методом get_result. Для классов MinValue и MaxValue метод get_result должен возвращать целое число, а для классов MeanValue и MedianValue — значение типа float. <br/> <br/> Если последовательность не содержит чисел, метод get_result должен возвращать None. <br/> Задача должна быть реализована без использования наследования классов. На проверку предоставляется код с каждым из классов. <br/> <br/> Я написал код и отправил его на проверку, но один из тестов не прошел, и я не могу понять, что именно я упустил... <br/> <br/> Вот мой код: <br/> <pre><code class="python">class MinValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return min(self.data)
return None
class MaxValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return max(self.data)
return None
class MeanValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return sum(self.data) / len(self.data)
return None
class MedianValue:
def __init__(self):
self.data = []
def add(self, number):
Ваш код выглядит вполне неплохо, но не хватает реализации метода `get_result` в классе `MedianValue`. Давайте рассмотрим, как его можно реализовать, чтобы корректно рассчитывать медиану, а также пройдемся по коду на предмет возможных улучшений.
Вот исправленный код, включая реализацию для медианы:
```python
class MinValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return min(self.data)
return None
class MaxValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return max(self.data)
return None
class MeanValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if self.data:
return sum(self.data) / len(self.data)
return None
class MedianValue:
def __init__(self):
self.data = []
def add(self, number):
self.data.append(number)
def get_result(self):
if not self.data:
return None
sorted_data = sorted(self.data)
n = len(sorted_data)
mid = n // 2
if n % 2 == 0:
return (sorted_data[mid - 1] + sorted_data[mid]) / 2
else:
return sorted_data[mid]
# Пример использования
min_val = MinValue()
min_val.add(5)
min_val.add(1)
min_val.add(3)
print(min_val.get_result()) # 1
max_val = MaxValue()
max_val.add(5)
max_val.add(1)
max_val.add(3)
print(max_val.get_result()) # 5
mean_val = MeanValue()
mean_val.add(5)
mean_val.add(1)
mean_val.add(3)
print(mean_val.get_result()) # 3.0
median_val = MedianValue()
median_val.add(5)
median_val.add(1)
median_val.add(3)
print(median_val.get_result()) # 3
```
### Пояснения:
1. **MedianValue**:
- Мы сортируем список `self.data`, прежде чем вычислять медиану.
- Если количество элементов четное, медиана — это среднее значение двух центральных элементов.
- Если количество элементов нечетное, медиана — это центральный элемент.
2. **Проверка на пустой список**: Все классы проверяют, содержит ли `self.data` элементы, прежде чем пытаться вычислить результат, в случае чего возвращая `None`.
Если после этих изменений у вас остались проблемы с тестами, пожалуйста, уточните, какие именно тесты не проходят, и мы попробуем разобраться вместе.
С медианой перемудрили и неправильно посчитали для чётных длин.
def get_result(self): if not self.data: return None if len(self.data) % 2 == 1: return float(self.data[len(self.data) // 2]) return float(self.data[len(self.data) // 2 - 1] + self.data[len(self.data) // 2]) / 2
А для остальных классов можно сделать проще и не хранить всю последовательность.
class MinValue: def __init__(self): self.min = None def add(self, number): if number < self.min self.min = number def get_result(self): return self.min