Я пытаюсь сделать карточную игру "дурак".Но когда я запускаю программу, я получаю AttributeError:
Введите количество игроков: 1 Игроки: player1's содержит:
Значение руки: 0 Traceback (последний последний вызов): Файл "main.py", строка 25, в печатном виде (проигрыватель) Файл "C: \ Users \ kozus \ Desktop \ fool \ fool \ Hand.py", строка 38, в str text + ="\ nHand value:" + файл str (self.getValue ()) "C: \ Users \ kozus \ Desktop \ fool \ fool \ Hand.py", строка 20, в результате getValue + = self.card.cardPoints (self) Файл "C: \ Users \ kozus \ Desktop \ fool \ fool \ Card.py", строка 8, в cardPoints, если self.rank в ["10", "J", "Q", "K", "A"]: AttributeError: У объекта 'Hand' нет атрибута 'rank'
Это мой код: из случайного импорта shuffle
class Card(object):
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def getRank(self):
return self.rank
def cardPoints(self):
# Rerturns amount points for some card
if self.rank in ["10", "J", "Q", "K", "A"]:
if self.rank == "A":
# 11 points for ace
return 11
else:
# 10 points for 10, jack, queen или king
return 10
else:
# Amount points for any other card
return ["6", "7", "8", "9"].index(self.rank) + 6
def __str__(self):
return "%s %s" % (self.rank, self.suit)
class Hand(object):
def __init__(self, name):
self.name = name
self.cards = []
self.card = Card
def addCard(self, card):
# Add card in hand
self.cards.append(card)
def getValue(self):
# Amount points in hand
result = 0
# Amount aces in hand
aces = 0
for card in self.cards:
result += self.card.cardPoints(self)
# If ace in hand then we increasing amount of aces in hand
if card.getRank() == "A":
aces += 1
# Count aces like 1 or 11 points
if result + aces * 10 <= 21:
result += aces * 10
return result
def __str__(self):
text = "%s's contains:\n" % self.name
for card in self.cards:
text += str(card) + " "
text += "\nHand value: " + str(self.getValue())
return text
class Deck(object):
def __init__(self):
ranks = ["6", "7", "8", "9", "10", "J", "Q", "K", "A"] # Ranks
suits = ["D", "C", "H", "S"] # Suits
self.cards = [Card(r, s) for r in ranks for s in suits] # Generating deck, consists of 36 cards
shuffle(self.cards)
def dealCard(self):
# Card handing over function
self.cards.pop()
amount_players = int(input("Enter amount of players: "))
deck = Deck() # Creating deck
i = 0
# Creating players
players = [Hand("player{0}".format(i + 1)) for i in range(amount_players)]
print("Players: ")
for player in players:
# Printing players
print(player)
for player in players:
while i < 6:
# Distrbuting 6 card per player
player.addCard(deck.dealCard())
i += 1
for player in players:
print(player)
Кто-нибудь теперь может это исправить?