from collections import defaultdict
from goody import type_as_str
class Bag:
def __init__(self, i=None):
self.bag = []
if i == None:
pass # i is None, do nothing after create empty bag
elif type(i)==list:
self.bag.extend(i) # append whole list i into bag with extend method
else:
self.bag.append(i) # append single item i into bag
def __repr__(self):
for s in self.bag :
return s
def __str__(self):
for s in self.bag :
return s
def __len__ (self):
if 'Bag()' in self.bag:
return 0
else:
return len(self.bag)
def unique(self):
l = []
if len(self.bag) == 0:
return 0
else:
for x in self.bag:
if x not in l:
l.append(x)
else:
continue
return len(l)
def __contains__ (self,i):
if i in self.bag:
return True
else:
return False
def count(self,i):
return self.bag.count(i)
def add(self,i):
self.bag.append(i)
def __add__(self,i):
for x in i:
self.bag.append(x)
def remove(self,i):
if i not in self.bag:
raise ValueError
for x in self.bag:
if x == i:
self.bag.remove(x)
break
def __eq__ (self,i):
return self.bag == i
def __ne__ (self,i):
return self.bag != i
def __iter__(self):
class PH_iter:
def __init__(self,i):
self.l = i
def add(self,i):
self.l.append(i)
def remove(self,i):
self.l.pop(i)
return PH_iter(self.l)
if __name__ == '__main__':
#driver tests
import driver
driver.default_file_name = 'bsc1.txt'
# driver.default_show_exception= True
# driver.default_show_exception_message= True
# driver.default_show_traceback= True
driver.driver()
Bag function generally returns a list. Writing Bag() constructs an empty bag. Writing Bag(['d','a','b','d','c','b','d']) construct a bag with one 'a', two 'b's, one 'c', and three 'd's.
The iter method is supposed to be defined in the bag class to add or remove item from the list.
The input is:
# Test iterator
e-->[i for i in sorted(b)]-->['a', 'b', 'b', 'c', 'd', 'd', 'd']
c-->i = iter(b)
c-->b.add('d')
c-->b.remove('a')
e-->[i for i in sorted(b)]-->['b', 'b', 'c', 'd', 'd', 'd', 'd']
e-->[i for i in sorted(x for x in i)]-->['a', 'b', 'b', 'c', 'd', 'd', 'd']
The error i got is:
94 # Test iterator
95 *Error: [i for i in sorted(b)] raised exception AttributeError: 'Bag' object has no attribute 'l'
96 *Error: i = iter(b) raised exception AttributeError: 'Bag' object has no attribute 'l'
99 *Error: [i for i in sorted(b)] raised exception AttributeError: 'Bag' object has no attribute 'l'
100 *Error: [i for i in sorted(x for x in i)] raised exception NameError: name 'i' is not defined
Can anyone help me to fix the iter function to make it work? Many thanks.