#python #class #oop #methods
#python #класс #ооп #методы
Вопрос:
Мой класс имеет дело со списками целых чисел и вычисляет их, чтобы они не имели повторяющихся значений. Я реализовал новый метод ‘intersect’, который принимает два объекта IntSet и создает новый объект со значениями, которые отображаются в обоих списках объектов (val).
Первоначально я создавал новый список внутри метода (вместо объекта), чтобы добавить целые числа, найденные в обоих списках, однако я подумал, что было бы уместно создать новый объект и добавить значения в val в новый объект. Однако я получаю сообщение об ошибке NameError: global name 'inSet' is not defined
Вот мой код:
class intSet(object):
"""An intSet is a set of integers
The value is represented by a list of ints, self.vals.
Each int in the set occurs in self.vals exactly once."""
def __init__(self):
"""Create an empty set of integers"""
self.vals = []
def insert(self, e):
"""Assumes e is an integer and inserts e into self"""
if not e in self.vals:
self.vals.append(e)
def member(self, e):
"""Assumes e is an integer
Returns True if e is in self, and False otherwise"""
return e in self.vals
def remove(self, e):
"""Assumes e is an integer and removes e from self
Raises ValueError if e is not in self"""
try:
self.vals.remove(e)
except:
raise ValueError(str(e) ' not found')
def __str__(self):
"""Returns a string representation of self"""
self.vals.sort()
return '{' ','.join([str(e) for e in self.vals]) '}'
def intersect(self, other):
#intersected = []
intersected = inSet()
for x in self.vals:
if x in other.vals:
#intersected.append(x)
intersected.insert(x)
return intersected
a= {-15,-14,-5,-2,-1,1,3,4,11,18}
b= {-12,-3,3,8,12,16,18,20}
set1 = intSet()
set2 = intSet()
[set1.insert(x) for x in a]
[set2.insert(x) for x in a]
print set1.intersect(set2)
Бонусный вопрос, большая часть кода была написана администраторами для MOOC, 6.00.1x. Мне просто нужно было реализовать метод ‘intersect’. Почему фигурные скобки, которые используются для целей словаря, используются вместо фигурных скобок list [] ?
Комментарии:
1. вы забыли
t
имяinSet
2. бонусный ответ: в Python для создания
set
вы можете использоватьset()
или{}
ie.{1,2,3,2,5}
3. Боже, упражнение Scala на Python ?!
4. Использование компиляции списков таким образом, как вы это делаете, безусловно, является плохой практикой. В качестве побочного эффекта вы создаете паразитный список of None, что не является вашим намерением. Простой цикл здесь более чистый.
Ответ №1:
Это IntSet, а не inSet , вы неправильно написали его в своем методе intersect. И по привычке лучше начинать свои занятия с заглавной буквы (хотя фиксированных правил нет, этой привычки придерживаются многие).
Что касается фигурных скобок, они предназначены не только для словарей, но и для наборов Python. Таким образом, используя их в методе __str__, вывод предполагает, что экземпляры вашего класса действительно являются своего рода наборами.