Mam prośbę byście spojrzeli na mój kod i wyjaśnili mi pewną sprawę. Kod ten jest częścią małego programu, który będzie grą w karty. Potworzyłem klasy i mam klasę Wojna_Hand(), który między innymi ma właściwość total liczącą wartość kart. Wartość ta jest obliczana na podstawie atrybutu RANKS klasy Card(), konkretnie jest to index listy. Wszystko fajnie działa jak karta jest od trójki wzwyż, ale dlaczego nie wyświetla się liczba punktów, dla karty "dwójki". Ona powinna mieć wartość 0.
class Hand(object):
""" Ręka - wszystkie karty trzymane przez gracza. """
def __init__(self):
self.cards = []
def __str__(self):
if self.cards:
rep = ""
for card in self.cards:
rep += str(card) + "\t"
else:
rep = "<pusta>"
return rep
def add(self, card):
self.cards.append(card)
class Card(object):
""" Karta do gry. """
RANKS = ["2", "3", "4", "5", "6", "7", "8",
"9", "10", "J", "Q", "K", "A"]
SUITS = ["pik", "kier", "trefl", "karo"]
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __str__(self):
rep = self.rank + str(" ") + self.suit
return rep
class Wojna_Card(Card):
""" Karta do wojny. Ustawienie wartości kart. """
@property
def value(self):
v = Wojna_Card.RANKS.index(self.rank)
return v
class Wojna_Hand(Hand):
""" Ręka w wojnie. """
def __init__(self, name):
super(Wojna_Hand, self).__init__()
self.name = name
def __str__(self):
rep = self.name + ":\t" + super(Wojna_Hand, self).__str__()
if self.total:
rep += "(ma " + str(self.total) + " punktów)"
return rep
@property
def total(self):
t = 0
for card in self.cards:
t += card.value
return t
card1 = Wojna_Card("3", "pik")
print("karta: " + str(card1) + ". Jej wartość wynosi: " + str(card1.value))
card2 = Wojna_Card("2", "kier")
print("karta: " + str(card2) + ". Jej wartość wynosi: " + str(card2.value))
reka = Wojna_Hand("Tomasz")
reka.add(card1)
print(reka)
reka = Wojna_Hand("Jan")
reka.add(card2)
print(reka)
input("\n\nAby zakończyć program, naciśnij klawisz Enter.")