Nauč se Python > Kurzy > Začátečnický kurz PyLadies > Třídy > Zpětná vazba k domácím projektům

Feedback k domácím projektům

Řešení 1 - obsah lze vypočítat jen jednou a musí být spočten před počítáním rozdílu

In [1]:
class Ctverec:
    def __init__(self, strana):
        self.strana = strana

    def obvod(self):
        self.obvod = 4*self.strana
        return self.obvod

    def obsah(self):
        self.obsah = self.strana**2
        return self.obsah

    def rozdil_obsahu(self, jiny_ctverec):
        return self.obsah - jiny_ctverec.obsah
In [2]:
c1 = Ctverec(5)
c1.obsah()
Out[2]:
25
In [3]:
c1.obsah()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-dd68ddc8112e> in <module>
----> 1 c1.obsah()

TypeError: 'int' object is not callable
In [4]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-b2d4f2c61000> in <module>
      1 c1 = Ctverec(5)
      2 c2 = Ctverec(10)
----> 3 c2.rozdil_obsahu(c1)

<ipython-input-1-092b26a44411> in rozdil_obsahu(self, jiny_ctverec)
     12 
     13     def rozdil_obsahu(self, jiny_ctverec):
---> 14         return self.obsah - jiny_ctverec.obsah

TypeError: unsupported operand type(s) for -: 'method' and 'method'
In [5]:
c1 = Ctverec(5)
c2 = Ctverec(10)
print(c1.obsah())
print(c2.obsah())
print(c2.rozdil_obsahu(c1))
25
100
75

Řešení 2 - nefunguje dokud nemá ty správné globální proměnné

In [6]:
class Ctverec:
    def __init__(self, strana):
        self.strana = strana

    def obvod(self):
        return 4 * self.strana

    def obsah(self):
        return self.strana ** 2

    def rozdil_obsahu(self, jiny_ctverec):
        return self.obsah() - druhy_ctverec.obsah()
In [7]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-7-b2d4f2c61000> in <module>
      1 c1 = Ctverec(5)
      2 c2 = Ctverec(10)
----> 3 c2.rozdil_obsahu(c1)

<ipython-input-6-745a0cf85edb> in rozdil_obsahu(self, jiny_ctverec)
     10 
     11     def rozdil_obsahu(self, jiny_ctverec):
---> 12         return self.obsah() - druhy_ctverec.obsah()

NameError: name 'druhy_ctverec' is not defined

Řešení 3 - globální proměnné podruhé

In [8]:
class Ctverec:
    def __init__(self, strana):
        self.strana = strana

    def obvod(self):
        obvod = 4 * self.strana
        return obvod

    def obsah(self):
        obsah = self.strana * self.strana
        return obsah

    def rozdil_obsahu(self):
        rozdil = ctverec1.obsah() - ctverec2.obsah()
        return rozdil
In [9]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-b2d4f2c61000> in <module>
      1 c1 = Ctverec(5)
      2 c2 = Ctverec(10)
----> 3 c2.rozdil_obsahu(c1)

TypeError: rozdil_obsahu() takes 1 positional argument but 2 were given

Řešení 4 - jiny_ctverec je vlastně délka strany

In [10]:
class Ctverec:
    def __init__(self, strana):
        self.strana = strana

    def obvod(self):
        print(self.strana*4)

    def obsah(self):
        print(self.strana**2)

    def rozdil_obsahu(self, jiny_ctverec):
        self.jiny_ctverec = jiny_ctverec
        print((self.strana**2 - self.jiny_ctverec**2))
In [11]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-b2d4f2c61000> in <module>
      1 c1 = Ctverec(5)
      2 c2 = Ctverec(10)
----> 3 c2.rozdil_obsahu(c1)

<ipython-input-10-8c22002c806b> in rozdil_obsahu(self, jiny_ctverec)
     11     def rozdil_obsahu(self, jiny_ctverec):
     12         self.jiny_ctverec = jiny_ctverec
---> 13         print((self.strana**2 - self.jiny_ctverec**2))

TypeError: unsupported operand type(s) for ** or pow(): 'Ctverec' and 'int'

Řešení 5 - jiny_ctverec je vlastně délka strany podruhé

In [12]:
class Ctverec:
    def __init__(self, strana):
        self.strana = strana
    
    def obvod(self):
        self.obvod = self.strana * 4
        print("Ctverec o strane {}cm ma obvod {}cm.".format(self.strana, self.obvod))

    def obsah(self):
        self.obsah = self.strana ** 2
        print("Ctverec o strane {}cm ma obsah {}cm2.".format(self.strana, self.obsah))

    def rozdil_obsahu(self, jiny_ctverec):
        rozdil = (jiny_ctverec ** 2) - (self.strana ** 2)
        return rozdil

Správné řešení

In [13]:
class Ctverec():
    def __init__(self, strana):
        self.strana = strana

    def obvod(self):
        return 4 * self.strana

    def obsah(self):
        return self.strana ** 2

    def rozdil_obsahu(self, druhy_ctverec):
        return self.obsah() - druhy_ctverec.obsah()

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.