Informatika2-2012/Gyakorlat11m
A MathWikiből
#!/usr/bin/env python class MyNoneError(TypeError): pass class Jegyzet(str, object): # def konstruktor atirasa # ebben az esetben felesleges, mert a string-tol szarmazik le # a string pedig eleve ami eleve egy sorozatot var parameternek #def __init__(self, s=[]) # self.__data__ = str(s) #pass def __init__(self, s = None): if not isinstance(s, str) or len(s) < 1: raise MyNoneError('nincs semmi feljegyezve') else: #super(self, str).__init__(self, s) str.__init__(self, s) class Jegyzettomb(list, object): # mivel a lista leszarmazotja igy meg van valositva a # __len__, __getitem__, __iter__ def __init__(self, s = None): if isinstance(s, str): self.append(s) elif isinstance(s, Jegyzettomb): self += s else: raise TypeError('a jegyzetet csak karaktersorozattal vagy letezo \ jegyzettombbel lehet letrehozni') # mivel a lista + operatora sorozatot var parameternek # azt felul kell definialni def __add__(self, j): if isinstance(j, Jegyzettomb): super(self, Jegyzettomb).__add__(self, j) #list.__add__(self, j) else: if isinstance(j, Jegyzet): self.append(j) return self # generator keszitese def create_gen(self): for i in self: yield i # kereses def find(self, s): index_lista = [] for i in enumerate(self): if i[1].find(s) >= 0: index_lista.append(i) return index_lista j1 = Jegyzet('vegyel legot') j2 = Jegyzet('vegyel kubut') j3 = Jegyzet('vegyel viragot') jt1 = Jegyzettomb("vidd le a szemetet") jt2 = Jegyzettomb(str(j1)) jt2 + j2 + j3 print '----------------------------------' for i in jt2.create_gen(): print i print '----------------------------------' jt1 += jt2 for i in jt1: print i print '----------------------------------' # ettol meghal a progi ha csak igy benthagyjuk #jt3 = Jegyzettomb(5) try: #jt4 = Jegyzettomb(5) j4 = Jegyzet() except MyNoneError: print "Haha egy jegyzet letrehozasa sikertelen!" except TypeError: print "Hat itt ez biztos hogy jegyzettomb hiba!" finally: print "__END OF ERROR TEST__" print '----------------------------------' v = 'vegyel' print '--- Kereses a "{0:s}" szora: ---'.format(v) for i in jt1.find('vegyel'): print '{0:d}:\t{1:s}'.format(i[0], i[1]) print '----------------------------------'