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

#python #list #function #class

#питон #Список #функция #класс

Вопрос:

Поэтому я создал класс Calculate , в котором я определю две функции plus(self,x) , avg_over_totalnum(self) которые изменят список __init__(self, items) .

plus(self, x) добавит в список либо x, либо членов x self.items . Здесь x-одно из следующих значений: (1) число, (2) список или (3) кортеж. Если x-это число, оно добавляется непосредственно в список. Если x представляет собой список или кортеж, его члены добавляются в список по отдельности.

Например, если self.items == [5]

если x == 45 плюс(self, x) вернется [5,45] , если x == [4,5] вывод будет [5,4,5]

avg_over_totalnum(self) вычислит и вернет среднее значение данных, хранящихся в коллекции

Вот моя попытка кода до сих пор, которая вообще не работает…

 class Calculate:  def __init__(self, items):  self.items = list(items)  def plus(self,x):  if x in 123456789:  return self.items   x  else:  return self.items.append(x)  def avg_over_totalnum(self):  return (sum(self.items))/(len(self.items))  

Какие изменения я должен внести в свой код??

Комментарии:

1. Рассмотрим случай, когда self.items пусто. Вы получите ошибку деления на ноль.

Ответ №1:

Твой plus метод немного странный. Он не изменяется self.items на месте, поэтому self.items не обновляйтесь x . Кроме того, ваш оператор if проверяет x , является ли он целым числом, что не имеет смысла. Измените plus с помощью функции ниже:

 def plus(self,x):  if isinstance(x,(list,tuple)):  self.items.extend(list(x))  else:  self.items.append(x)  return self.items  

Также, чтобы избежать ошибки обнуления:

 def avg_over_totalnum(self):  return (sum(self.items))/(len(self.items)) if self.items else 0  

Тогда все работает нормально.

 c = Calculate([5]) print(c.plus(4)) # [5, 4] print(c.plus([3,2])) # [5, 4, 3, 2] print(c.avg_over_totalnum()) # 3.5