NOVOROČNÍ AKCE! Získej 90 % extra kreditů ZDARMA na náš interaktivní e-learning s promo kódem OSLAVY90. Zjisti více:

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
Nejnovější komentáře jsou na konci poslední stránky.
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.

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

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()
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())
Avatar
Petr Hubacek
Člen
Avatar
Petr Hubacek:25.1.2021 10:22

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

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.

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.

Avatar
Milan
Člen
Avatar
Milan:1.7.2022 21:06

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

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()
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()
Nejnovější komentáře jsou na konci poslední stránky.
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 95.