Добавление объектов с использованием среднего (среднего) последовательно - PullRequest
0 голосов
/ 12 февраля 2019

Скажем, у нас есть класс AverageNumber, который при добавлении находит среднее значение добавляемых чисел:

class AverageNumber():

  def __init__(self, value):
    self.value = value

  def __add__(self, other):
    average = ( self.value + other.value ) / 2 # This is the issue?
    return AverageNumber(average)

  def __str__(self):
    return self.value

Этот код неверен, так как не учитывает аддитивные коммутативные и ассоциативные свойства, которые яищет, а именно:

среднее (1 + 3 + 2) = среднее (1 + 2 + 3) и т. д.

Однако этого не происходит, так как вышеприведенный класс добавляет два ввремя.НЕПРАВИЛЬНЫЕ результаты приведены ниже:

>>> b = AverageNumber(1) + AverageNumber(3) + AverageNumber(2)
>>> b.value
2.0
>>> b = AverageNumber(1) + AverageNumber(2) + AverageNumber(3)
>>> b.value
2.25

Мой вопрос: как я могу изменить приведенный выше код для устранения этой проблемы?

1 Ответ

0 голосов
/ 12 февраля 2019

Вам просто нужно отследить количество задействованных номеров:

class AverageNumber():

  def __init__(self, value, count=1):
    self.value = value
    self.count = count

  def __add__(self, other):
    total = self.value + other.value
    count = self.count + other.count
    return AverageNumber(total, count)

  def getValue(self):
      return self.value / self.count



b = AverageNumber(1) + AverageNumber(3) + AverageNumber(2)
print(b.getValue())

b = AverageNumber(1) + AverageNumber(2) + AverageNumber(3)
print(b.getValue())

Output:
2.0
2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...