NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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í.

Diskuze – Lekce 4 - Hrací kostka v Pythonu - Zapouzdření a konstruktor

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
jan.kubes07
Tvůrce
Avatar
jan.kubes07:20.10.2020 13:40

Ahoj, mám problém s timhle kodem:
class Kostka:
"""
Třída reprezentuje hrací kostku.
"""

def __init__(self, pocet_sten=6):
self._pocet_sten = pocet_sten

def vrat_pocet_sten(sel­f):
return self._pocet_sten

def hod(self):
"""
Vykoná hod kostkou a vrátí číslo od 1 do
počtu stěn.
"""
import random as _random
return _random.randint(1, self.__pocet_sten)

def _str_(self):
"""
Vraci textovy pocet sten.
"""
return str("Kostka ma {0} sten.".format(sel­f._pocet_sten))
# vytvoření kostek
sestistenna = Kostka()
desetistenna = Kostka(10)

#hod šestistěnnou
print(sestistenna)
for _ in range(10):
print(sestisten­na.hod(), end=" ")

input()

Vyhodí to chybu:
Traceback (most recent call last):
File "C:\Users\Hon­za\Documents\ko­dy\Python\Are­na.py", line 32, in <module>
print(sestisten­na.hod(), end=" ")
File "C:\Users\Hon­za\Documents\ko­dy\Python\Are­na.py", line 18, in hod
return _random.randint(1, self.__pocet_sten)
AttributeError: 'Kostka' object has no attribute '_Kostka__pocet_sten'

Děkuju.

 
Odpovědět
20.10.2020 13:40
Avatar
jan.kubes07
Tvůrce
Avatar
Odpovídá na jan.kubes07
jan.kubes07:20.10.2020 13:41

Sorry, zapomněl jsem to dat do zdrojového kódu ...

 
Odpovědět
20.10.2020 13:41
Avatar
jan.kubes07
Tvůrce
Avatar
jan.kubes07:23.10.2020 16:22

Tak jeste jednou:

class Kostka:
        """
        Třída reprezentuje hrací kostku.
        """

        def __init__(self, pocet_sten=6):
                self._pocet_sten = pocet_sten

        def vrat_pocet_sten(self):
                return self._pocet_sten

        def hod(self):
                """
                Vykoná hod kostkou a vrátí číslo od 1 do
                počtu stěn.
                """
                import random as _random
                return _random.randint(1, self.__pocet_sten)

        def _str_(self):
                """
                Vraci textovy pocet sten.
                """
                return str("Kostka ma {0} sten.".format(self._pocet_sten))
# vytvoření kostek
sestistenna = Kostka()
desetistenna = Kostka(10)

#hod šestistěnnou
print(sestistenna)
for _ in range(10):
print(sestistenna.hod(), end=" ")

input()
 
Odpovědět
23.10.2020 16:22
Avatar
Petr Hubacek
Člen
Avatar
Petr Hubacek:25.1.2021 10:16

Ahoj,
nemá být místo:

#hod šestistěnnou
print(sestistenna)

toto?

#hod šestistěnnou
print(sestistenna.vrat_pocet_sten())
 
Odpovědět
25.1.2021 10:16
Avatar
Petr Hubacek
Člen
Avatar
Petr Hubacek:25.1.2021 10:22

Už jasný. Neměl jsem v class "def __str__(self):"

 
Odpovědět
25.1.2021 10:22
Avatar
Odpovídá na Marty
Vojtěch Perník:28.8.2021 14:43

Já to taky pořád nemůžu pochopit. Pravděpodobně je to asi zažitá konvence Pythonu.

 
Odpovědět
28.8.2021 14:43
Avatar
Odpovídá na jan.kubes07
Adam Čermák:14.2.2022 17:27

'Kostka' object has no attribute '_Kostka__pocet_sten­... Zde máš dvě podtržítka. V ostatních metodách výše máš definováno pouze s jedním podtržítkem.

 
Odpovědět
14.2.2022 17:27
Avatar
Milan
Člen
Avatar
Milan:1.7.2022 21:06

Konstruktory 2. odstavec "Metodu konstruktoru budeme mí prázdnou." chybi t ... jinak ok lekce :).

 
Odpovědět
1.7.2022 21:06
Avatar
Martin Truhlář:24.8.2022 17:39

Posílám svůj kód!

class Kostka:
    def __init__(self, pocet_sten):
        self.pocet_sten  = pocet_sten

    def hod(self):
        import random as _random
        return _random.randint(1, self.pocet_sten)

    def vypis(self):
        print("Kostka s " + str(self.pocet_sten) + " stěnami")
        print("A její náhodné čísla jsou:")
        for _ in range(self.pocet_sten):
            print(kostka.hod(), end=" ")

kostka = Kostka(10)
kostka.vypis()
 
Odpovědět
24.8.2022 17:39
Avatar
Martin Truhlář:24.8.2022 18:36

Pardon, doplněno o šestku a desítku :) !

class Kostka:
    def __init__(self, pocet_sten):
        self.pocet_sten  = pocet_sten

    def hod(self):
        import random as _random
        return _random.randint(1, self.pocet_sten)

    def vypis(self):
        print("\n\nKostka s " + str(self.pocet_sten) + " stěnami")
        print("A její náhodné čísla jsou:")
        for _ in range(self.pocet_sten):
            print(kostka6.hod(), end=" ")
            print(kostka10.hod(), end=" ")

kostka6 = Kostka(6)
kostka10 = Kostka(10)
kostka6.vypis()
kostka10.vypis()
 
Odpovědět
24.8.2022 18:36
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 90.