» »

[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?
  • spremenila: ktka ()

Vesoljc ::

Abnormal behavior of abnormal brain makes me normal...

kr?en ::

Spet nekdo, ki misli, da mu bodo naredili seminarsko/domaco nalogo za faks.

ktka ::

Ne ne mislim tega. To je bila naloga na izpitu. Rabim pomoč, ne pa rešene naloge.

Zgodovina sprememb…

  • spremenila: ktka ()

kr?en ::

In kaj ti ni jasno? Kako sploh zacet nalogo, dedovanje, implementacija kaksne metode?

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?

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?

kr?en ::

Kot prvo, uporabljaj oznake za kodo. Je veliko bolj berljivo.

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Python3] Izvajanje ukazov po določenem času

Oddelek: Programiranje
211464 (1074) noraguta
»

[Python] HTTPS na desktopu dela, na Arduinu ne

Oddelek: Programiranje
91404 (1017) N4g4c3N
»

Python - težava s slovarji - vnos

Oddelek: Programiranje
51307 (1129) RatedR
»

python osnova

Oddelek: Programiranje
212345 (1658) detroit
»

Predstavitev dvojiškega drevesa z seznamom

Oddelek: Programiranje
141952 (1552) ktka

Več podobnih tem