0

ブラックジャックプログラムを作成しようとしていますが、デッキオブジェクトから.append()を使用する別のオブジェクトにメッセージを送信しようとすると、AttributeErrorが発生し続けます。オブジェクトには「追加」がありません。

関連すると思うコードは次のとおりです。

class Deck(Hand):

    def deal(self, players, per_hand= 1):
        for rounds in range(per_hand):
            for hand in players:
                if self.hand:
                    top_card = self.hand[0]
                    self.give(top_card,hand)

プレーヤーパラメータは、以下を使用してインスタンス化したオブジェクトのタプルです。

class Bj_player(Player,Hand):

    def __init__(self,name,score= 0,status= None):
        self.name = name
        self.score = score
        self.status = status
        self.hand = Hand()

Player基本クラスには、ユーザーからのいくつかの入力以外は何も含まれていません。上記は私が間違っているところですか?

class Hand(object):
"""a hand of cards"""


    def __init__(self):
        self.hand = []

    def add(self, card):
        self.hand.append(card)


    def give(self,card,other_hand):
        if self.hand:
            self.hand.remove(card)
            other_hand.add(card)
        else:
            print("EMPTY ALREADY. COULD NOT GIVE")

str部分を取り出して切り詰めました。私が得ているエラーはこれです:

 line 44, in add
    self.hand.append(card)
    AttributeError: 'Hand' object has no attribute 'append'

私はかなり新しいので、簡単に説明すればするほどよいでしょう。ありがとう。

また、それが役立つ場合に備えて、これが私が物事を始める方法です:

deck = Deck() #populated and all that other stuff

total_players = Player.ask_number("How many players will there be? (1-6): ",1,6)
for player in range(total_players):
    name = input("What is the player's name? ")
    x = Bj_player(name)
    roster.append(x)

deck.deal(roster,2) #error =(
4

3 に答える 3

1

問題は次の行です。

        self.hand = Hand()

Bj_playerクラス内。これにより、self.hand変数はHand本来あるべきリストではなく、インスタンスになります。rosterはこれらのBJ_playerインスタンスのリストであるため、を呼び出すdeck.deal(roster)と、関数内でfor hand in players、各handオブジェクトがこれらのBj_playerインスタンスの1つになります。

これを解決する最善の方法は、から継承しBj_player ないhandことです。(実際、なぜそれを継承するのか、またはクラスが提供するPlayer便利な機能は明確ではありません)。Player代わりに、Bj_player独自のクラス(おそらく代わりに名前が付けられPlayerている-混乱が少ない)にして、行を変更します

    for hand in players:
        if self.hand:
            top_card = self.hand[0]
            self.give(top_card,hand)

    for player in players:
        if self.hand:
            top_card = self.hand[0]
            self.give(top_card,player.hand)

別の注意:に変更self.handするとself.cards、状況がより明確になります

于 2012-09-06T02:24:38.587 に答える
0

例えば、

a=[1,2,3]
a.append(4)

生成されます:

a=[1,2,3,4]

ただし、NonTypeオブジェクトa=a.append(4)を返します。このオブジェクトは処理できません。

したがって、属性エラーが発生します

于 2018-03-16T09:48:04.987 に答える
-2

変数がすべて「hand」(小文字)であり、「Hand」(大文字)ではないことを確認してください。エラーを見ると、「Hand」(大文字)には属性が追加されていないというエラーが表示されます。したがって、ある時点で、Handクラスに何かを追加しようとするか、変数handをクラスHandに設定します。(それぞれの大文字と小文字に注意してください)。よくある間違い、それは私たち全員に起こります。ハッピーコーディング!

于 2012-09-06T01:29:46.047 に答える