Это мой первый язык программирования, отличного от MATLAB, поэтому у меня возникают проблемы с объектно-ориентированным программированием. В частности, я работаю над программой, которая имитирует игру в блэкджек. Он работал, но я попытался добавить некоторые новые функции, позволяющие игрокам делать ставки.Объектно-ориентированное программирование с ошибкой атрибута
Чтобы предположить, BJ Player - это объект, который был коллекцией объектов карты. Def_init использовал только имя и имена в качестве параметров, но я добавил startmonies (начальные деньги, которые игрок ставит). Суперкласс BJ-плеера в конечном счете является BJ-рукой. Теперь я получаю сообщение об ошибке при вызове метода для добавления карты в эту руку. Ниже, где ошибка о
class BJ_Game(object):
""" A Blackjack Game. """
def __init__(self, names, startingmonies):
self.players = []
for name in names:
player = BJ_Player(name)
spot = names.index(name)
startingscratch = startingmonies[spot]
player_with_money = (name, startingscratch,0)
self.players.append(player_with_money)
Это место, где берет начало ошибок (карты модуля, который импортируется в модуль BJ используется выше):
class Hand(object):
""" A hand of playing cards. """
def __init__(self):
self.cards = []
def __str__(self):
if self.cards:
rep = ""
for card in self.cards:
rep += str(card) + "\t"
else:
rep = "<empty>"
return rep
def clear(self):
self.cards = []
def add(self, card):
self.cards.append(card)
def give(self, card, other_hand):
self.cards.remove(card)
other_hand.add(card)
Это ошибка, я получаю .: строка 47, в отдавания other_hand.add (карта)
AttributeError: 'кортеж' объект не имеет атрибута 'добавить'
я получаю эту ошибку при попытке разобраться с картами. Все остальное работало до этого, поэтому единственным реальным изменением, которое я сделал, является добавление параметра ставки. Я исследовал этот вопрос и не смог получить сильное понимание. Будем очень благодарны любой помощи. Спасибо!
Вот еще информация. Я думаю, что ошибка происходит, потому что я изменил self.players как список кортежей. Я не уверен, как это исправить.
for index, player in enumerate(self.players):
flag = 1
while flag:
try:
(name, players_cache,bet) = player
print(players_cache)
print("Current player:",name)
bet = int(input("Please select how much this player would like to wager: "))
if bet <= 0:
print("Bet must be greater than 0")
elif bet <= players_cache:
flag = 0
players_cache-=bet
player = (name,players_cache,bet)
self.players[index] = player
else:
print("Insufficient funds. PLayer only has",players_cache,"dollars available")
except ValueError:
print("Input must be a number\n")
# deal initial 2 cards to everyone
self.deck.deal(self.players + [self.dealer], per_hand = 2)
Здесь я получаю другую часть ошибки. линия 169, в игре self.deck.deal (self.players + [self.dealer], per_hand = 2)
Вот полный блок ошибок. К сожалению, чтобы не показывать все это раньше:
линии 262, в основной() линии 258, в главном game.play (max_Cards) линии 169, в пьесе self.deck.deal (self.players + [self.dealer], per_hand = 2) строки 65, в сделке self.give (top_card, рука) линии 47, в отдаваниях other_hand.add (карта) AttributeError: 'кортеж' объект не имеет атрибута ' add '
строка 65, в сделке self.give (top_card, hand) –