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

Globální proměnné obecně

In [1]:
def soucet(b, c):
    return a + b + c
In [2]:
soucet(2, 3)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-91c5fa422207> in <module>
----> 1 soucet(2, 3)

<ipython-input-1-2a95e93322e7> in soucet(b, c)
      1 def soucet(b, c):
----> 2     return a + b + c

NameError: name 'a' is not defined

In [3]:
a = 1
In [4]:
soucet(2, 3)
Out[4]:
6

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

In [5]:
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 [6]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-b2d4f2c61000> in <module>
      1 c1 = Ctverec(5)
      2 c2 = Ctverec(10)
----> 3 c2.rozdil_obsahu(c1)

<ipython-input-5-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í 2 - globální proměnné podruhé

In [7]:
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 [8]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(c1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-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 a komplikace printem

In [9]:
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):
        print((self.strana**2 - jiny_ctverec**2))
In [10]:
c1 = Ctverec(5)
c2 = Ctverec(10)
c2.rozdil_obsahu(5)
75

Správné řešení

In [11]:
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.