2017-01-09 7 views
0
import collections 
    from random import choice 

    card = collections.namedtuple('card', ['rank', 'suit']) 

    class FrenchDeck: 
     ranks = [str(n) for n in range(2, 11)] + list('JQKA') 
     suits = 'spades diamonds clubs hearts'.split() 

     def __init__(self): 
     self._cards = [card(rank, suit) for suit in self.suits 
             for rank in self.ranks] 

     def __len__(self): 
     return len(self._cards) 

     def __getitem__(self, position): 
      return self._cards[position] 



    deck = FrenchDeck() 

    choice(deck) 

エラーは次のとおりです。オブジェクトのインデックスをサポートしていません()私は取得しています

Traceback (most recent call last): 
     File "cards.py", line 24, in <module> 
     choice(deck) 
     File "C:\Python36\lib\random.py", line 258, in choice 
     return seq[i] 
    TypeError: 'FrenchDeck' object does not support indexing 

これは流暢のPythonからであり、それは本にあるように私はそれを入力しました。これが新しいPythonディストリビューションに関連する問題かどうか疑問に思っています。

+1

私は流暢のPythonのことを聞いていませんが、私が見つけた唯一のプログラミングチュートリアルは、(どの言語でも)[公式のPythonチュートリアル](https://docs.python.org/3.6/tutorial/index.html)です。 – TigerhawkT3

答えて

1

インデントの問題があります。メソッド__getitem__がメソッド__len__で宣言されています。そのため、インデックス作成はサポートされていません。

-1

私も流暢Pythonのに慣れていないですが、あなたはここで使用しなかった方のpython 3.3と2.7の両方を使用して試してみたいことがあり、彼らは非常に異なる構文を持つ

+0

これは彼の問題ではありません。 @DYZによって指摘されているように、彼のインデントはオフであった、彼のバージョンではなかった。 –

関連する問題