2016-06-27 6 views
0

Handオブジェクトをとり、一定数のCardオブジェクトを持ち、メッセージを出力してからカードを削除する、関数throw_cardsを作成しようとしています。 self.cardsリスト。 これは私が現在持っているものです:私はPythonを使用してリストからオブジェクトを削除する方法

>>> q.throw_cards() 
King of Hearts deals 7 damage! 
5 of Clubs deals 5 damage! 
10 of Hearts deals 7 damage! 
>>> print(q) 
3 of Diamonds 
10 of Hearts 
10 of Spades 

問題で終わる機能を使用して

ability = {'Clubs':5, 'Diamonds':6, 'Hearts':7, 'Spades':8} 

class Hand(Deck): 
     """Represents a hand of playing cards.""" 
     def __init__(self, label=''): #name for hand? idk 
      self.cards = [] 
      self.label = label 

     def throw_cards(self): 
      for card in self.cards: 
       print(card, 'deals', ability[Card.suit_names[card.suit]], 
         'damage!') 
       self.cards.remove(self.cards[0]) 
q = Hand() 
w= Deck() 
w.shuffle() 
w.move_cards(q, 6)  

このように、それはそう、それが正しい順序でカードを削除していないということです。私も.pop()と異なるインデックス.remove()を使ってみましたが、それを印刷して手からカードを取り除くことはできません。また、この質問自体が書式や情報の点で問題ないかどうか教えてください。私は非常にstackoverflowすることです。

答えて

2

反復処理中のリストを変更すると、表示される問題が発生しています。

あなたはすべてのカードを削除するように見えるので、あなたがそれらを印刷し終えた後、なぜだけでなく、空のリストにself.cardsを再バインド:あなたのソリューションのための

def throw_cards(self): 
    for card in self.cards: 
     print(card, 'deals', ability[Card.suit_names[card.suit]], 'damage!') 
    self.cards = [] 
+0

ありがとう!これは当然のことですが、 'print'の後にカードを削除したいのであれば、繰り返しの途中でカードを投げ捨てるのをやめたいのです。例えば、敵が3枚目のカードを投げた後に0 HPを命中したとします。しかし、私はそれがそのように振舞うようにメソッドを書き直さなければならないことは分かっています。 –

関連する問題