2017-02-03 3 views
0

メソッドをDeckクラスから呼び出した後、カードを印刷できません。私はPythonが初めてです。私はスーパーDeckクラスを継承していると考えて、PlayerHandクラスのカードを印刷することができます。 i以来`Deck`クラスから` get_cards() `メソッドを呼び出した後にカードを印刷します

class Card(object): 
     RANKS = ["Ace", "2", "3", "4", "5", "6", "7", 
     "8", "9", "10", "Jack", "Queen", "King"] 
     SUITS = ["Club", "Diamond", "Hearts", "Spades"] 

     def __init__(self, rank, suit): 
     self.suit = suit 
     self.rank = rank 

    def __str__(self): 
     return self.suit + " of " + self.rank 

class Deck(object): 
    def __init__(self): 
    self.card = [] 

    def populate(self): 
     for rank in Card.RANKS: 
      for suite in Card.SUITS: 
       self.card.append(Card(rank, suit)) 

    def get_cards(self): 
      return self.card 

    def shuffle(self): 
     import random 
     random.shuffle(self.card) 

    class PlayerHand(Deck): 

     def print_cards(self): 
     cards = self.get_cards() 
     for card in cards: 
      print(i) 

    if __name__=='__main__': 
    player = PlayerHand() 
    player.print_cards() 
+0

これは実際のインデントですか? –

+0

いいえ、私の実際のインデントはありません。私は、コードを書式設定しようとしていたときに頼りにしたと思います。 – Intelligent

+0

を再度入力し、ボタン{}}を使用してSOのコードを正しくフォーマットします。 – furas

答えて

2

どこでも、あなたはprint(i)は便利な何かをすることを期待する理由が定義されていませんか?

あなたが望むのはprint(card)だと思います。

+0

iをカードに変更しても印刷されません。 – Intelligent

1

印刷するものは何もありません。あなたは手を初期化しました。これはデッキから継承されます。 Initializing Deckは、self.cardを空のリストに設定する以外は何もしません。したがって、print_cardsに電話すると、手はまだ空です。

コード内に他の方法がありません。オブジェクトを作成しても、他のメソッドは自動的に呼び出されません。 シャッフルを明示的にと呼ぶ必要があります。

何よりも、あなたはまだあなたが扱っているデッキにカードを入れなければなりません。あなたは52枚全てのカードを生成してマスターデッキに入れなければなりません。


SIMPLE ADDITION:

class Deck(object): 
    def __init__(self): 
     print "Initialize deck" 
     self.card = [] 
     self.populate() 
     self.shuffle() 

これはうまくシャッフル、52枚のカードの完全なデッキに手を回します。私たちがお勧めする他の変更を加えれば、それも印刷されます。

+0

ありがとうございます、あなたは正しいです:)。あなたはとても助けになった。 – Intelligent

0

@ ScottHunterの答えに加えて、iは何も意味しません。

デコレーション内のself.cardメンバー内の各Cardオブジェクトを反復処理します。あなたのコード内

2つの問題:デッキ内

  1. seld.cardが初期化されていません。 populateは決して呼び出されず、カードは価値がありません。デッキの__init__でこの機能を呼び出す必要があります。

  2. あなたの反復では、私が言ったようにiは存在しません。

    print card # calls the __str__ method of card 
    
0

あなたは後にプレイヤーを初期化カードを移入するのを忘れ:それはのようなものになりますので、あなたは、(値を取得するために)card.rankで印刷またはcard.suit(あるいはその両方)を呼び出す必要があります。 Player.cardは空で、何も印刷されません。関数print_cards()を呼び出す前にplayer.populate()を呼び出す必要があります。

他にも述べたように、私はカードでなければなりません。そして、母集団関数のスペルミスを発見しました。「スーツ」は「スイート」にする必要があります

for suite in Card.SUITS: 
    self.card.append(Card(rank, suit)) # should be suite 
+0

エラーはもう一つの方法です: "suite"を "suit"に変更してください。 – Prune

関連する問題