helenafanfrlikova / python-autumn-2022

0 stars 0 forks source link

Úkol č. 4 #4

Closed helenafanfrlikova closed 1 year ago

helenafanfrlikova commented 1 year ago

https://github.com/helenafanfrlikova/python-autumn-2022/blob/main/ukol-04.py

Ahoj Pavlo, posílám úkol č. 4. Snažila jsem se udělat ke kuchařce i ten bonus, ale přes dlouhý boj se mi to nepodařilo :-( U té metody vyzkousene_recepty(self) jsem se totálně zacyklila a nevím si rady, jak dál. Budu ráda za jakékoli postřehy. Nepochopila jsem ani doplněný tip na použití metody repr, nevěděla jsem, kam to přesně napsat a jak by to mělo vypadat. Moc díky, ahoj Helena

pmoravkova commented 1 year ago

Ahoj, zacnu postupne. Tohle je drobnustka, ale bacha na to, tady mas obraceno kdy je vyzkouseno a kdy ne.

    def __str__(self):
        vypis = f"Recept na {self.nazev} má stupeň náročnosti {self.narocnost}. Recept najdete na adrese {self.url_adresa}. "
        if self.vyzkouseno: #aneb kdyz vyzkouseno == True
            return vypis + 'Ještě nevyzkoušen.'
        return vypis + 'Vyzkoušen.'

Duvod, proc ti to nic nevraci, je ten, ze funkce, jakmile narazi na return, tak skonci a vraci, co do te doby ma. Ty zde mas return ve for cyklu, takze jede recept po receptu, ale hned u prvniho receptu narazi na return, takze k druhemu, ktery vyzkouseny je, se funkce uz nedostane. Stacilo jen od-odsadit return, aby nebyl v ramci for cyklu, ale az po nem.

    def vyzkousene_recepty(self):
        self.seznam_vyzkousenych = []
        for recept in self.recepty:
            if recept.vyzkouseno == True:
                self.seznam_vyzkousenych.append(recept)
            return f"Tyto recepty byly vyzkoušeny: {self.seznam_vyzkousenych}." #zde spatne odsazeny return, vymaz jednu odrazku, at je na urovni s for a ne uvnitr for cyklu.

Poznamka k tomuto jeste. vytvareny seznam neni treba oznacovat self. Python si za self dosadi tu instanci dane tridy (tady tu moje_kucharka), ale zde si nic dosazovat nemusi, aby to fungovalo. Zde to nevadi, ale vubec tam self byt nemusi. Co se tyce metody repr. Ta vraci ve stringove podobe to, co by python vratil jako objekt. Aneb narazis na to tez. Kdyz ted pustis ten opraveny kod (az ododsadis return), tak ti python vrati na posledni kod print(moje_kucharka.vyzkousene_recepty()), neco na zpusob tohohle: Tyto recepty byly vyzkoušeny: [<__main__.Recept object at 0x7f005fd8d130>]. Kdy zde to v hranatych zavorkach je, jak si python pamatuje ten objekt muffiny. Kdyz pridas do tridy Recept metodu repr ti to prevede do citelne podoby - naprosta obdoba str. Muzes dokonce udelat to, ze budes chtit, aby ti to vypisovalo stejne, jako to vypisuje metoda str, takze staci do tridy Recept pak pridat:

    def __repr__(self):
        return self.__str__()

Ale muzes si tam napsat i cokoliv jineho. Obcas dost zmatecne vysvetluju, takze kdyby nebylo cokoliv jasneho, tak se urcite jeste ozvi