#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