Forum » Programiranje » [Python]Naloga z razredi in dedovanjem
[Python]Naloga z razredi in dedovanjem
ktka ::
Podan imamo razred Rastlina. Ta pozna metode:
- konstruktor __init__(self,ime,cveti,puščavska),s katerim istvarimo nov objekt tipa Rastlina. Argument cveti nam pove, koliko tednov na leto cveti in argument puščavska nam pove, če je rastlina primerna za puščavo ali ne. Če vnesemo napačne podatke, se sproži izjema.
- metodo lepa(self), ki vrne True, če je rastlina lepa in False sicer.
- lastnost cveti in puščavska preko katerih lahko beremo/nastavljamo lastnosti rastline. Če vnesemo napačne podatke, se sproži izjema.
Iz njega izpeljite razred Kaktus. Pri tem upoštevajte,da:
- je kaktus puščavska rstlina, zato lastnosti uporabnik puščavska ne sme nastavljati. Če jo poskusi nastaviti na False, naj se sproži izjema z besedilom 'Kaktus je puščavska rastlina.'
- so kaktusi lepi natanko tedaj, ko cvetijo več ali enako kot tednov na leto
- noben kaktus ne cveti manj kot in več kot tednov na leto. Če uporabnik poskusi vnesti napačne podatke naj se sproži izjem.
- dva kaktusa lahko križamo in pri tem dobimo kaktus, ki cveti toliko časa kot oba prvotna kaktusa skupaj, pomnoženo z naključnim realnim številom med in . Rezultat je potrebno seveda zaokrožiti na najbljižje celo število. Križanje dveh kaktusov predstavimo z operatorjem '+'.
To je navodilo naloge. Mi zna kdo pomagat?
- konstruktor __init__(self,ime,cveti,puščavska),s katerim istvarimo nov objekt tipa Rastlina. Argument cveti nam pove, koliko tednov na leto cveti in argument puščavska nam pove, če je rastlina primerna za puščavo ali ne. Če vnesemo napačne podatke, se sproži izjema.
- metodo lepa(self), ki vrne True, če je rastlina lepa in False sicer.
- lastnost cveti in puščavska preko katerih lahko beremo/nastavljamo lastnosti rastline. Če vnesemo napačne podatke, se sproži izjema.
Iz njega izpeljite razred Kaktus. Pri tem upoštevajte,da:
- je kaktus puščavska rstlina, zato lastnosti uporabnik puščavska ne sme nastavljati. Če jo poskusi nastaviti na False, naj se sproži izjema z besedilom 'Kaktus je puščavska rastlina.'
- so kaktusi lepi natanko tedaj, ko cvetijo več ali enako kot tednov na leto
- noben kaktus ne cveti manj kot in več kot tednov na leto. Če uporabnik poskusi vnesti napačne podatke naj se sproži izjem.
- dva kaktusa lahko križamo in pri tem dobimo kaktus, ki cveti toliko časa kot oba prvotna kaktusa skupaj, pomnoženo z naključnim realnim številom med in . Rezultat je potrebno seveda zaokrožiti na najbljižje celo število. Križanje dveh kaktusov predstavimo z operatorjem '+'.
To je navodilo naloge. Mi zna kdo pomagat?
- spremenila: ktka ()
ktka ::
Ne ne mislim tega. To je bila naloga na izpitu. Rabim pomoč, ne pa rešene naloge.
Zgodovina sprememb…
- spremenila: ktka ()
ktka ::
Jaz sem na izpitu morala narest samo razred kaktus. Rastlina naj bi bil že napisan.
Kaj mam v initu? iste parametre kot pri Rastlini?
Kako naredim da je puščavska 'privzeto' na True?
Kaj mam v initu? iste parametre kot pri Rastlini?
Kako naredim da je puščavska 'privzeto' na True?
kr?en ::
Pythona ne poznam, ampak tip rastilne lahko prednastavis na 'true' v konstruktorju in ne das tega parametra v klic konstruktorja v razredu Kaktus.
ktka ::
[class Rastlina:
def __init__(self,ime,cveti,puščavska):
self.ime = ime
self.cveti = cveti
self.puščavska = puščavska
def lepa(self):
pass
def povejCvetenje(self):
return self.cveti
def nastaviCvetenje(self,druga):
self.cveti = druga
def povejPuščavsko(self):
return self.puščavska
def nastaviPuščavska(self,druga):
self.puščavska = druga
cveti = property(fget = povejCvetenje,fset = nastaviCvetenje)
puščavska = property(fget = povejPuščavsko,fset = nastaviPuščavsko)
class Kaktus(Rastlina):
def __init__(self,ime = 'Kaktus',cveti,puščavska = True):
cveti = self.cveti]
Je kaj v tem smislu prav?
def __init__(self,ime,cveti,puščavska):
self.ime = ime
self.cveti = cveti
self.puščavska = puščavska
def lepa(self):
pass
def povejCvetenje(self):
return self.cveti
def nastaviCvetenje(self,druga):
self.cveti = druga
def povejPuščavsko(self):
return self.puščavska
def nastaviPuščavska(self,druga):
self.puščavska = druga
cveti = property(fget = povejCvetenje,fset = nastaviCvetenje)
puščavska = property(fget = povejPuščavsko,fset = nastaviPuščavsko)
class Kaktus(Rastlina):
def __init__(self,ime = 'Kaktus',cveti,puščavska = True):
cveti = self.cveti]
Je kaj v tem smislu prav?
ktka ::
class Rastlina: def __init__(self,ime,cveti,puščavska): self.ime = ime self.cveti = cveti self.puščavska = puščavska def lepa(self): pass def povejCvetenje(self): return self.cveti def nastaviCvetenje(self,druga): self.cveti = druga def povejPuščavsko(self): return self.puščavska def nastaviPuščavska(self,druga): self.puščavska = druga cveti = property(fget = povejCvetenje,fset = nastaviCvetenje) puščavska = property(fget = povejPuščavsko,fset = nastaviPuščavsko) class Kaktus(Rastlina): def __init__(self,ime = 'Kaktus',cveti,puščavska = True): cveti = self.cveti
ktka ::
vse se da, če se hoče. Hvala za pomoč:)
import random class Rastlina: def __init__(self,ime,cveti,puščavska): ''' >>> Rastlina('Magnolija',5,False) Rastlina(Magnolija,5,False) >>> Rastlina(3,5,False) Traceback (most recent call last): ... Exception: Ime rastline mora biti niz. >>> Rastlina('Mognolija','5',False) Traceback (most recent call last): ... Exception: Število tednov cvetenja mora biti celo število. >>> Rastlina('Mognolija',5,5) Traceback (most recent call last): ... Exception: Rastlina je lahko puščavska(True) ali nepuščavska(False). >>> Rastlina('Mognolija',-3,False) Traceback (most recent call last): ... Exception: Število tednov cvetenja ne more biti negativno. ''' self.ime = ime self.cveti = cveti self.puščavska = puščavska if not isinstance(self.ime,str): raise Exception('Ime rastline mora biti niz.') if not isinstance(self.cveti,int): raise Exception('Število tednov cvetenja mora biti celo število.') if self.puščavska != True and self.puščavska != False: raise Exception('Rastlina je lahko puščavska(True) ali nepuščavska(False).') if self.cveti < 0: raise Exception('Število tednov cvetenja ne more biti negativno.') def lepa(self): return True def povejCvetenje(self): ''' >>> a = Rastlina('Magnolija',5,False) >>> a.povejCvetenje() 5 ''' return self.cveti def nastaviCvetenje(self,druga): ''' >>> a = Rastlina('Magnolija',5,False) >>> a.nastaviCvetenje(10) >>> a Rastlina(Magnolija,10,False) >>> a = Rastlina('Magnolija',5,False) >>> a.nastaviCvetenje(-10) Traceback (most recent call last): ... Exception: Število tednov cvetenja ne more biti negativno. ''' if not isinstance(druga,int): raise Exception('Število tednov cvetenja mora biti celo število.') if druga < 0: raise Exception('Število tednov cvetenja ne more biti negativno.') self.cveti = druga def povejPuščavsko(self): ''' >>> a = Rastlina('Magnolija',5,False) >>> a.povejPuščavsko() False ''' return self.puščavska def nastaviPuščavsko(self,druga): ''' >>> a = Rastlina('Magnolija',5,True) >>> a.nastaviPuščavsko(False) >>> a Rastlina(Magnolija,5,False) >>> a = Rastlina('Magnolija',5,True) >>> a.nastaviPuščavsko(-667) Traceback (most recent call last): ... Exception: Rastlina je lahko puščavska(True) ali nepuščavska(False). ''' if druga != True and druga != False: raise Exception('Rastlina je lahko puščavska(True) ali nepuščavska(False).') self.puščavska = druga #lastnosti cvetenje = property(fget = povejCvetenje,fset = nastaviCvetenje) puščavsko = property(fget = povejPuščavsko,fset = nastaviPuščavsko) def __str__(self): return 'Ime rastline: ' + str(self.ime) + '\n' + 'Število tednov cvetenja: ' + str(self.cveti) + '\n' + 'Ali je rastlina puščavska: ' + str(self.puščavska) def __repr__(self): return 'Rastlina(' + (self.ime)+','+str(self.cveti)+','+str(self.puščavska)+')' class Kaktus(Rastlina): def __init__(self,ime,cveti,puščavska): ''' >>> Kaktus('Kaktus',5,True) Kaktus(Kaktus,5,True) >>> Kaktus('roža',5,True) Traceback (most recent call last): ... Exception: Ta rastlina se imenuje Kaktus. >>> Kaktus('Kaktus',5,False) Traceback (most recent call last): ... Exception: Kaktus je puščavska rastlina. >>> Kaktus('Kaktus',-10,True) Traceback (most recent call last): ... Exception: Kaktus cveti od 1 do 10 tednov na leto. >>> Kaktus('Kaktus',20,True) Traceback (most recent call last): ... Exception: Kaktus cveti od 1 do 10 tednov na leto. >>> Kaktus('Kaktus','5',True) Traceback (most recent call last): ... Exception: Število tednov cvetenja mora biti celo število. ''' self.ime = ime self.cveti = cveti self.puščavska = puščavska if self.ime != 'Kaktus': raise Exception('Ta rastlina se imenuje Kaktus.') if self.puščavska != True: raise Exception('Kaktus je puščavska rastlina.') if not isinstance(self.cveti,int): raise Exception('Število tednov cvetenja mora biti celo število.') if self.cveti < 1 or self.cveti > 10: raise Exception('Kaktus cveti od 1 do 10 tednov na leto.') def lepa(self): ''' >>> a = Kaktus('Kaktus',6,True) >>> a.lepa() True >>> a = Kaktus('Kaktus',3,True) >>> a.lepa() False ''' if self.cveti >= 5: return True else: return False def nastaviPuščavsko(self,druga): ''' >>> a = Kaktus('Kaktus',5,True) >>> a.nastaviPuščavsko(False) Traceback (most recent call last): ... Exception: Rastlina je lahko le puščavska(True). ''' if druga != True: raise Exception('Rastlina je lahko le puščavska(True).') self.puščavska = druga def __repr__(self): return 'Kaktus(' + (self.ime)+','+str(self.cveti)+','+str(self.puščavska)+')' def __add__(self,b): št = self.cveti + b.cveti št1 = št*random.random() return Kaktus('Kaktus',round(št1),True) if __name__=='__main__': import doctest doctest.testmod()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1447 (1057) | noraguta |
» | [Python] HTTPS na desktopu dela, na Arduinu neOddelek: Programiranje | 1398 (1011) | N4g4c3N |
» | Python - težava s slovarji - vnosOddelek: Programiranje | 1294 (1116) | RatedR |
» | python osnovaOddelek: Programiranje | 2319 (1632) | detroit |
» | Predstavitev dvojiškega drevesa z seznamomOddelek: Programiranje | 1935 (1535) | ktka |