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函数通常会返回一个列表。书写袋()构成一个空袋子。书包(['d','a','b','d','c','b','d'])构成一个'a',两个'b','c' ,还有三个'd'。如何修复__iter__方法
iter方法应该在bag类中定义,以便从列表中添加或删除项目。
输入是:
# 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']
我得到的错误是:
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
谁能帮我解决了ITER功能,使其工作?非常感谢。
“iter方法应该在包类中定义,以便从列表中添加或删除项目。” - 这根本不是'__iter__'方法的设计目的。你确定你理解你的任务吗? – user2357112
请参阅['python.org上的object .__ iter__'规范](https://docs.python.org/3/reference/datamodel.html#object.__iter__) – zvone
您是否使用Python 2.x?如果是这样的话:'Bag Bag(object):' –