这是我的第一个非MATLAB编程语言,所以我在面向对象编程方面遇到了一些麻烦。具体来说,我正在研究一个模拟二十一点游戏的程序。它正在运作,但我尝试添加一些新功能,允许玩家下注
为了推测,BJ Player是一个卡对象集合的对象。 Def_init过去常常只使用self和names作为参数,但我添加了startmonies(玩家正在下注的起始资金。)BJ玩家的超类最终是BJ手。我现在在调用方法向该手添加卡时遇到错误。以下是错误o
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:&#39; tuple&#39;对象没有属性&#39;添加&#39;
我在尝试交易卡时遇到此错误。之前其他所有工作都是如此,我所做的唯一真正的改变就是添加投注参数。我研究过这个问题并且无法获得强烈的理解。任何帮助将不胜感激。谢谢!
以下是一些更多信息。我认为错误正在发生,因为我改变了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行,in 主要() 第258行,主要 game.play(max_Cards) 第169行,在游戏中 self.deck.deal(self.players + [self.dealer],per_hand = 2) 第65行,在交易中 self.give(top_card,hand) 第47行,给出 other_hand.add(卡) AttributeError:&#39;元组&#39;对象没有属性&#39;添加&#39;
答案 0 :(得分:0)
如错误中所示,other_hand
必须是元组,因此在这种情况下您不能使用add()
。代码不能更改元组,它们必须由制作代码的人直接更改。元组是这样的:
tuple = (var1, var2, ..., varx)
基本上是一个列表但带有括号但不能被代码更改。因此,您必须确保other_hand
是一个列表。
答案 1 :(得分:0)
您正在将tuple
对象传递给give
方法,而不是解释为什么未定义add
方法的Hand实例。由于您还没有在代码中提到给出方法的调用,因此我无法将指针指向确切的行。