NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Lukáš Jež
Člen
Avatar
Lukáš Jež:30.9.2024 21:39
class Kniha:
    def __init__(self, nazov_param, autor_param, rok_vydania_param, ISBN_param, zaner_param):
        self.nazov = nazov_param
        self.autor = autor_param
        self.rok_vydania = rok_vydania_param
        self.ISBN = ISBN_param
        self.zaner = zaner_param

    def info_o_knihe(self):
        return f"Nazov: {self.nazov}, Autor: {self.autor}, Rok vydania: {self.rok_vydania}, ISBN: {self.ISBN}, Zaner: {self.zaner}"

class Kniznica:
    def __init__(self):
        self.zoznam_knih = []

    def zobrazenie_vsetkych_knih(self):
        return self.zoznam_knih

    def pridaj_knihu(self, kniha):
        self.zoznam_knih.append(kniha)

    def odstran_knihu(self, isbn):
        novy_zoznam_knih = []
        for kniha in self.zoznam_knih:
            if kniha.isbn != isbn:
                novy_zoznam_knih.append(kniha)
            else:
                print("Kniha s takymto ISBN sa v kniznici nenachadza.")
                break
        self.zoznam_kniziek = novy_zoznam_knih


def main():
    print("main")
    kniha1 = Kniha("Nazov1", "Autor1", 1998, "123-456-789", "Krimi")
    kniha2 = Kniha("Nazov2", "Autor2", 1997, "123-456-779", "Krimi")
    kniha3 = Kniha("Nazov3", "Autor3", 1996, "123-456-799", "Krimi")
    print(kniha1.info_o_knihe())
    print(kniha2.info_o_knihe())
    print(kniha3.info_o_knihe())
    kniznica1 = Kniznica()
    kniznica1.pridaj_knihu(kniha1)
    kniznica1.pridaj_knihu(kniha2)
    kniznica1.pridaj_knihu(kniha3)
    print(kniznica1.zobrazenie_vsetkych_knih())


if __name__ == "__main__":
    main()

Zkusil jsem: Skúšal som googliť, a pridavat zabudovane metody

__str__

a

__repr__

ale keďže im nerozumiem ešte nebol som schopný ich upraviť do požadovaného stavu.
skušal som aj

def zobrazenie_vsetkych_knih(self):
       return str(self.zoznam_knih)

a iné variácie metody metody ale neúspešne

Chci docílit: Chcem docieliť to, aby som zavolanim metody

zobrazenie_vsetkych_knih()

nad instanciou objektu Kniznica vypísal všetky knihy (vytvorene instancie objektu Kniha) ktoré mám aktuálne uložené v knižnici.

Nejaké rady ? :)

 
Odpovědět
30.9.2024 21:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.10.2024 15:43

Pustil jsem to pres https://www.online-python.com/ a tvuj program zobrzuje seznam knih, vsechno to zvladne ten print.
A ted je otazkou, proc to tobe nejde nebo, ceho chces docilit jineho?

main
Nazov: Nazov1, Autor: Autor1, Rok vydania: 1998, ISBN: 123-456-789, Zaner: Krimi
Nazov: Nazov2, Autor: Autor2, Rok vydania: 1997, ISBN: 123-456-779, Zaner: Krimi
Nazov: Nazov3, Autor: Autor3, Rok vydania: 1996, ISBN: 123-456-799, Zaner: Krimi
[<__main__.Kniha object at 0x7fb40b2f0f10>, <__main__.Kniha object at 0x7fb40b2f0a90>, <__main__.Kniha object at 0x7fb40b284220>]


** Process exited - Return Code: 0 **
Press Enter to exit terminal
 
Nahoru Odpovědět
1.10.2024 15:43
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.10.2024 15:52

Mozna hledas zpusob, jak ten sesnam prevest na str jinak nez pres print?
google = py format array list dictionary to str
https://www.simplilearn.com/…ng-in-python

my_list = ["apple", "banana", "cherry"]
result = ", ".join([item.upper() for item in my_list])
print(result)

my_list = ['apple', 'banana', 'orange']
my_string = ''
for i, fruit in enumerate(my_list):
 my_string += str(i) + ': ' + fruit + ', '
# Remove the trailing comma and space
my_string = my_string[:-2]
print(my_string)

https://stackoverflow.com/…ct-of-arrays

 
Nahoru Odpovědět
1.10.2024 15:52
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Peter Mlich
DarkCoder:1.10.2024 16:30

Vždyť to tam píše naprosto jasně.

Chce volat metodu zobrazenie_vset­kych_knih() třídy Kniznica pomocí vytvořeného objektu kniznica1 který je instancí třídy Kniznica, aby mohl vypsat všechny záznamy, které uvnitř kniznica1 má.

Nahoru Odpovědět
1.10.2024 16:30
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na DarkCoder
Peter Mlich:2.10.2024 8:10

Aha, ja si nevsiml, ze tam ma pred tim dalsi printy. No, tak to sem psal, pouzil bych ty peiklady z google, tam je to i s tim __str__. Jako clovek, ktery py neovlada, bych pouzil cyklus, jako v jinem jazyce a na __STR__ bych se vykaslal.

    def i2(self, k): # to bych nedaval do kniha, protoze se to pribali do kazde nova kniha a zabira pamet (ale chapu, ze se to lepe upravuje na jednom miste, data o knize)
        return f"Nazov: {k.nazov}, Autor: {k.autor}, Rok vydania: {k.rok_vydania}, ISBN: {k.ISBN}, Zaner: {k.zaner}"

    def z2(self):
        result = [];
        for item in self.zoznam_knih:
          result.append(self.i2(item))
        return "\n".join(result)

# ...
    print(kniznica1.z2())
 
Nahoru Odpovědět
2.10.2024 8:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.10.2024 8:17

s tim str je to mozna jasnejsi tady https://stackoverflow.com/…-using-print

>>> class Test:
...     def __init__(self):
...         self.a = 'foo'
...     def __repr__(self):
...         return "Test()"
...     def __str__(self):
...         return "member of Test"
...
>>> t = Test()
>>> t
Test()
>>> print(t) # pri printu se formatuje ta class na str pomoci te __str__ automaticky
# coz je sice sikovne, ale ve tvem pripade pri 1.000.000 knihach budes
# zabirat milionkrat pamet protoze v kazde knize budes mit to formatovani pridane
# ale, da se to pouzit treba na mensi polozky, rozhodne ne databazoveho typu
member of Test
 
Nahoru Odpovědět
2.10.2024 8:17
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.10.2024 8:22
result = ", ".join([item.upper() for item in my_list])

# jednoradkove pravdepodobne jekak takto, ale PY neznam, nevim, co to udela :)
return "\n".join([self.i2(item) for item in self.zoznam_knih])

#        result = [];
#        for item in self.zoznam_knih:
#          result.append(self.i2(item))
#        return "\n".join(result)
 
Nahoru Odpovědět
2.10.2024 8:22
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Lukáš Jež
DarkCoder:2.10.2024 13:15
class Kniha:
    def __init__(self, nazov, autor, rok_vydania, ISBN, zaner):
        self.nazov = nazov
        self.autor = autor
        self.rok_vydania = rok_vydania
        self.ISBN = ISBN
        self.zaner = zaner

    def info_o_knihe(self):
        return f"Nazov: {self.nazov}, Autor: {self.autor}, Rok vydania: {self.rok_vydania}, ISBN: {self.ISBN}, Zaner: {self.zaner}"

class Kniznica:
    def __init__(self):
        self.zoznam_knih = []

    def zobrazenie_vsetkych_knih(self):
        for kniha in self.zoznam_knih:
            print(kniha.info_o_knihe())

    def pridaj_knihu(self, kniha):
        self.zoznam_knih.append(kniha)

def main():
    kniznica = Kniznica()
    kniznica.pridaj_knihu(Kniha("Nazov1", "Autor1", 1998, "123-456-789", "Krimi"))
    kniznica.pridaj_knihu(Kniha("Nazov2", "Autor2", 1997, "123-456-779", "Krimi"))
    kniznica.pridaj_knihu(Kniha("Nazov3", "Autor3", 1996, "123-456-799", "Krimi"))

    kniznica.zobrazenie_vsetkych_knih()

if __name__ == "__main__":
    main()
Nahoru Odpovědět
2.10.2024 13:15
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lukáš Jež
Člen
Avatar
Lukáš Jež:2.10.2024 13:27

Dakujem za navhry a tipy.
Nakoniec som sa uspokojil s takymto zapisom co robi v podstate to co som chcel

def zobrazenie_vsetkych_knih(self):
     for kniha in self.zoznam_knih:
         print(kniha.info_o_knihe())
 
Nahoru Odpovědět
2.10.2024 13:27
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.10.2024 14:07

s tim str by to prave bylo zajimavejsi :)

class Kniha:
    def __init__(self, nazov, autor, rok_vydania, ISBN, zaner):
        self.nazov = nazov
        self.autor = autor
        self.rok_vydania = rok_vydania
        self.ISBN = ISBN
        self.zaner = zaner

#    def info_o_knihe(self):
#    def __str__(self):
        return f"Nazov: {self.nazov}, Autor: {self.autor}, Rok vydania: {self.rok_vydania}, ISBN: {self.ISBN}, Zaner: {self.zaner}"

#...
#        print(kniha.info_o_knihe())
        print(kniha)
 
Nahoru Odpovědět
2.10.2024 14:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.