Objektni smučarji
Ogrevalna naloga
V ogrevalni nalogi si predstavljajmo, da imamo enega smučarja. Njegove točke v različnih disciplinah shranjujemo v (globalni) spremenljivki primernega tipa. Kakšen tip bi to bil, odkrijte sami; upoštevajte, da imena disciplin niso podana vnaprej, temveč si jih lahko izmišljamo sproti (v testih je neka disciplina "velesmuk" in disciplina, katere ime je naključna črka, ki si jo izmislijo testi).
Napišite funkciji dodaj(disciplina, tocke), ki prišteje podano
število točk pri podani disciplini, in tock(disciplina), ki vrne
podano število točk.
Funkciji bi se lahko uporabljali takole.
Bodite pozorni na zadnji izpis: funkcija tock vrne 0 točk,
če gre za disciplino, v kateri tekmovalec še ni dobil nobene točke.
Rešitev
V rešitvi bomo naredili nekaj, kar se ne sme - uporabljali globalne
spremenljivke. Ne tako grdo, da bi morali uporabiti celo global,
a vseeno - to se ne dela. Namen te ogrevalne naloge je tudi, da se potem v
obvezni nalogi pokaže, kako te stvari delati pravilneje.
Če vemo za slovarje s privzetimi vrednostmi, je življenje lahko.
Brez njih se je potrebno nekoliko bolj potruditi, saj moramo tako od dodajanju elementov kot ob njihovem iskanju preverjati, ali jih že imamo v slovarju.
V drugi funkciji nam muke nekoliko skrajša get:
Obvezna naloga
Zdaj pa ista reč, a za več smučarjev. Definirajte razred Smucar,
ki bo imel metodi dodaj(self, disciplina, tocke) in
tock(self, disciplina); prvi prišteje temu smučarju
podano število točk v podani disciplini, druga vrne število točk, ki jih je
ta smučar doslej dosegel v tej disciplini.
Spomnite se, kako sem na predavanjih rekel nekaj v slogu, da je objekt svet
zase; tisto, kar bi bilo brez objektov globalna spremenljivka, je tu
"spremenljivka" znotraj selfa.
Rešitev
Vse je isto, le da tocke ni več globalna spremenljivka,
temveč pripada razredu Smucar in se imenuje
self.tocke. Nastavimo jo v konstruktorju. Funkciji
dodaj in tock postaneta metodi in dobita argument
self.