2016-10-18 7 views
0

私はPythonの初心者です。コードを実行するとインデックスエラーが発生します。私はStackoverflowの関連する質問を見てきましたが、私はまだバグが何かを見ることができません。私はどんな反応に対しても非常に感謝しています。ありがとうございました。ここでは、コードは次のとおりです。IndexError:リストがPython 3の範囲外にある

class Card: 
    def __init__(self, suit = 0, rank = 2): 
     self.suit = suit 
     self.rank = rank 

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] 
    rank_names =[None,'Ace','2','3','4','5','6','7','9','10','Jack','Queen', 'King'] 

    def __str__ (self): 
     return '%s of %s' % (Card.rank_names[self.rank], Card.suit_names[self.suit]) 

    def __lt__(self,other): 
     t1 = self.suit, self.rank 
     t2 = other.suit, other.rank 
     return t1 < t2 


class Deck: 
    def __init__(self): 
     self.cards = [] 
     for suit in range(4): 
      for rank in range(1, 14): 
       card = Card(suit, rank) 
       self.cards.append(card) 

    def __str__(self): 
     res = [ ] 
     for card in self.cards: 
      res.append(str(card)) 
     return '\n'.join(res) 


deck1 = Deck() 
print(deck1) 

それから私は、次のエラーを得た:

Traceback (most recent call last): 
    File "/Users/Enze/Python/untitled/Inheritance.py", line 35, in <module> 
    print(deck1) 
    File "/Users/Enze/Python/untitled/Inheritance.py", line 30, in __str__ 
    res.append(str(card)) 
    File "/Users/Enze/Python/untitled/Inheritance.py", line 11, in __str__ 
    return '%s of %s' % (Card.rank_names[self.rank], Card.suit_names[self.suit]) 
IndexError: list index out of range 

答えて

3

最後の要素のインデックスは(リストが始まる列挙されている値12であるので、あなたは、あなたのrank_namesリスト内の13のアイテムを持っています0) - ループ内

for suit in range(4): 
     for rank in range(1, 14): 
      card = Card(suit, rank) 

あなたが取得しようとする最大のインデックスがです10(rangeは国境を除くために、数字一つ一つを生成している)、あなたはあなたは13枚のカードを持っていたが、あなたは、インデックスの問題のうちの原因となる14枚のカードを見つけることを試みたindex out of range例外

+0

ありがとう、ありがとうございます。 – summer

+0

お気軽に –

2
class Card: 
    def __init__(self, suit = 0, rank = 2): 
     self.suit = suit 
     self.rank = rank 

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] 
    rank_names =[None,'Ace','2','3','4','5','6','7','9','10','Jack','Queen', 'King'] 

    def __str__ (self): 
     return '%s of %s' % (Card.rank_names[self.rank], Card.suit_names[self.suit]) 

    def __lt__(self,other): 
     t1 = self.suit, self.rank 
     t2 = other.suit, other.rank 
     return t1 < t2 


class Deck: 
    def __init__(self): 
     self.cards = [] 
     for suit in range(4): 
      for rank in range(1, 13): #error here. 
       card = Card(suit, rank) 
       self.cards.append(card) 

    def __str__(self): 
     res = [ ] 
     for card in self.cards: 
      res.append(str(card)) 
     return '\n'.join(res) 


deck1 = Deck() 
print(deck1) 

を持っている理由です。

は、この例を見てみましょう:

for i in range(1,14): 
    print(i) 

それは13を含む1〜13を表示します。しかし、あなたのリストのインデックスは0から始まるでそう13個の項目はあなたに0

+0

ありがとうございます。そうですか。 – summer

0

使用を含む0-12スロットを与えるだろうしていますrank_namesに「8」がありません

class Card: 
    def __init__(self, suit = 0, rank = 2): 
     self.suit = suit 
     self.rank = rank 

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] 
    rank_names =[None,'Ace','2','3','4','5','6','7','8','9','10','Jack','Queen', 'King'] 

    def __str__ (self): 
     return '%s of %s' % (Card.rank_names[self.rank], Card.suit_names[self.suit]) 

    def __lt__(self,other): 
     t1 = self.suit, self.rank 
     t2 = other.suit, other.rank 
     return t1 < t2 


class Deck: 
    def __init__(self): 
     self.cards = [] 
     for suit in range(4): 
      for rank in range(1, 14): 
       card = Card(suit, rank) 
       self.cards.append(card) 

    def __str__(self): 
     res = [ ] 
     for card in self.cards: 
      res.append(str(card)) 
     return '\n'.join(res) 


deck1 = Deck() 
print(deck1) 
関連する問題