Objekti Karta

Če do sedaj še nisi spoznal(-a) običajnih igralnih kart, bi bil sedaj pravi čas, da si omisliš komplet igralnih kart in jih spoznaš, sicer ta in naslednja enota ne bosta imeli smisla. Komplet igralnih kart vsebuje 52 kart, ki pripadajo eni izmed štirih barv in eni izmed trinajstih vrednosti. Barve so pik, srce, karo in križ (v padajočem vrstnem redu). Vrednosti so as (ang. Ace), 2, 3, 4, 5, 6, 7, 8, 9, 10, fant (ang. Jack), dama (ang. Queen) in kralj (ang. King). Glede na igro, ki jo igramo, ima lahko as vrednost, ki je višja od kralja ali nižja od 2.

Če želimo ustvariti nov objekt, ki bo predstavljal igralno karto, je precej očitno, da bo tak objekt vseboval dve lastnosti: _barva in _vrednost. Vendar ni tako očitno, kakšnega tipa naj bosta ti dve lastnosti. Lahko bi uporabili nize, ki bi vsebovali na primer "pik" za barvo in na primer "kraljica" za vrednost. Težava pri takšnem načinu je ta, da bi bilo zelo težko primerjati, katera izmed kart ima višjo barvo oziroma vrednost.


Druga možnost je, da za kodiranje barv in vrednosti uporabimo števila. S kodiranjem ne mislimo šifriranja v neko skrivno kodo, ampak, da bomo definirali preslikavo med zaporedjem števil in elementi. Na primer:

pik  --> 0
srce --> 1
karo --> 2
križ --> 3

Očitna lastnost takega kodiranja je, da barve v vrstnem redu zakodiramo kot števila, kar nam omogoča primerjanje barv kart s primerjanjem števil. Kodiranje vrednosti pa je precej očitno; vsako številko vrednost zakodiramo kot isto število, za asa in figure pa uporabimo naslednje kodiranje:

as    --> 1
fant  --> 11
dama  --> 12
kralj --> 13

Definicija razreda Karta z ustrezno inicializacjsko metodo izgleda takole:

class Karta:

  def __init__(self, barva=0, vrednost=0):
    self._barva = barva
    self._vrednost = vrednost

Če želimo ustvariti objekta, ki predstavljata na primer karti pikovo tri in srčevega fanta, to storimo takole:

pik_tri = Karta(0, 3)  # pikova tri
karta1 = Karta(1, 11)  # srčev fant