@R_M_69

Упустил, но что?

У меня есть задача:
Напишите классы MinValue, MaxValue, MeanValue, MedianValue, которые вычисляют минимальное, максимальное, среднее арифметическое значение и медиану последовательности целых чисел.

Экземпляры классов создаются без аргументов. Напишите метод add, который должен добавлять в последовательность число, которое будет учтено при вычислении результата методом get_result. Для MinValue и MaxValue get_result должен возвращать целое число, для MeanValue и MedianValue — число типа float.

Если в последовательности нет чисел, метод get_result должен возвращать None.
Данная задача решается без применения принципа наследования классов. На проверку отправляется код с классом.

Я написал код и отправляю его на проверку, но один из тестов не проходит и я не понимаю, что я забыл учесть...

Вот мой код:
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 self.data:
            if len(self.data) == 1:
                return float(self.data[0])
            elif len(self.data) % 2 != 0 and len(self.data) > 1:
                return float(self.data[len(self.data) // 2 + 1])
            else:
                if len(self.data) > 2:
                    return float((self.data[len(self.data) // 2 + 1] + self.data[len(self.data) // 2]) / 2)
                else:
                    return float((self.data[0] + self.data[1]) / 2)
        return None
66e85da5b01b7285802268.png
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
С медианой перемудрили и неправильно посчитали для чётных длин.
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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы