2016-04-02 17 views
1

これは私の最初のMATLABプログラミング言語ではないので、オブジェクト指向プログラミングに問題があります。具体的には、私はブラックジャックゲームをシミュレートするプログラムに取り組んでいます。それは機能していましたが、私はプレイヤーがベットをすることを可能にするいくつかの新しい機能を追加しようとしました属性エラーを伴うオブジェクト指向プログラミング

推測すると、BJ Playerはカードオブジェクトのコレクションであったオブジェクトです。 Def_initはパラメータとして自分自身と名前だけを持っていましたが、私はスタートマインドを追加しました(プレイヤーが賭けているお金を開始します).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) 

Oエラーこれはここでエラーの発信元(上記使用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: 'タプル' オブジェクトが属性 '追加'

私は、このERを取得していませんカードを扱おうとしているときに。他のすべてが以前に働いたので、私が行った唯一の真の変化は、betパラメータを追加することです。私はこの問題を研究し、強い理解を得ることはできませんでした。どんな支援も大歓迎です。ありがとうございました!

ここにいくつかの情報があります。 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) 

ここではエラーの別の部分があります。 line 169 in play self.deck.deal(self.players + [self.dealer]、per_hand = 2)

ここでは完全なエラーブロックがあります。申し訳ありません前にそれのすべてを示す:プレイ self.deck.dealに メインgame.play(max_Cards) ライン169、で、 メイン() ライン258で、

ライン262(self.players (カード番号) AttributeError: 'タプル'オブジェクトに属性がありません '追加 '

答えて

0

addメソッドが定義されていないHandインスタンスではなく、tupleオブジェクトをgiveメソッドに渡しています。あなたのコードにメソッドを与えるための呼び出しを記述していないので、私は正確な行にポインタを与えることができませんでした。

+0

65行目、 –

0

エラーで表示されているように、other_handはタプルでなければならないため、これにはadd()を使用できません場合。タプルはコードで変更することはできません。コードを作成する人がタプルを直接変更する必要があります。基本的には

tuple = (var1, var2, ..., varx) 

リストが、括弧で、コードによって変更することはできません。タプルにはこのようなものです。だから、代わりにother_handがリストであることを確認する必要があります。

+0

私はタプルとリストの違いを理解していると思いますが、なぜこれが前に今働いたのか分かりません self.give(top_card、hand) –

0

助けてくれてありがとう!ベットを属性に変更し、問題を修正しました。

関連する問題