2017-03-15 8 views
0

ランク、スイート、ブラックジャックの値の特定の属性を持つトランプカードオブジェクトを作成しました。トランプカードを作成するクラスPython

ブラックジャックの値の部分には、listintのインスタンスを比較できないというTypeErrorが続きます。私は解決する方法がわからない(リストのインデックスだけを比較し、そのインデックスに基づいてブラックジャックの価値を与える方法は?)

if/elifブロックは、bjValue()関数またはinit()関数内に属していますか?ここで

は私のコードです:

class Card: 

    """playing card object where numeric rank, suit and blackjack values are stored""" 

    def __init__(self, rank, suit): 
     self.rank = rank 
     self.suit = suit 
     self.ranks = [None, "Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"] 
     self.suits = {"d": "Diamonds", 
        "c": "Clubs", 
        "h": "Hearts", 
        "s": "Spades"} 




    def getRank(self): 
     """returns the rank of the card""" 
     return self.rank 

    def getSuit(self): 

     return self.suits.get(self.suit) 

    def bjValue(self): 

     if self.rank > 1 or self.rank < 11: 
      self.value = self.rank 

     elif self.rank == "Ace": 
      self.value = 1 

     elif self.rank == "Jack" or self.ranks == "Queen" or self.ranks == "King": 
      self.value = 10 


     return self.value 


    def __str__(self): 

     return "%s of %s" % (self.ranks[self.rank], self.suits.get(self.suit)) 





c1 = Card(1,"s") 
c2 = Card(11,"d") 
print(c1) #expect Ace of Spades 
print(c2) #expect Jack of Diamonds 

c3 = Card(5,"c") #expect 5 of clubs 
print(c3.getRank()) 
print(c3.getSuit()) #expect Five 
print(c3.bjValue()) #expect 5 
print(c3) 

c4 = Card(1,"s") 
print(c4) 

編集:だから、私は私のタイプミスを修正し、私はもう、エラーが届かないが、私はまだ(ジャック、女王と王カードの不正なブラックジャックの値を取得しています私はif文を持っていても、自分のブラックジャックの値を順位として返します)、私のロジックの瑕疵がどこにあるのかわかりません。

+0

正確なスタックトレースをご利用ください。 –

答えて

0

あなたは初心者ですから。のは、それはあなたを与えてエラーを考えてみましょう:

if self.ranks > 1 or self.ranks < 11: 
TypeError: '>' not supported between instances of 'list' and 'int' 

はあなたのbjValue機能にタイプミスがあります:あなたが代わりに実際の(現在の)rank値を、ranksリストに比較している

if self.ranks > 1 or self.ranks < 11: 
    self.value = self.ranks 

。あなたは何を意味するのか

はおそらくだった:あなたのコメントに基づいて

if self.rank > 1 or self.rank < 11: 
    self.value = self.ranks[self.rank] 

編集

、私は疑うあなたが欲しいのはこのようなものです。

class Card: 
    def __init__(self, rank, suit): 
     self.ranks = [None, "Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"] 
     self.rank = self.ranks[rank] 
     self.suits = {"d": "Diamonds", "c": "Clubs", "h": "Hearts", "s": "Spades"} 
     self.suit = self.suits[suit] 
     self.value = -1 

    def getRank(self): 
     return self.rank 

    def getSuit(self): 
     return self.suit 

    def bjValue(self): 
     if self.rank == "Ace": 
      self.value = 1 
     elif self.rank == "Jack" or self.rank == "Queen" or self.rank == "King": 
      self.value = 10 
     elif type(self.rank) is int: 
      if self.rank > 1 and self.rank < 11: 
       self.value = self.ranks[self.rank] 
     return self.value 

あなたはどんなすでに作成カードのランクやスーツを変更できるようにしたい場合を除き、その後、私は移動推薦する場合bjValueから__init__に文。

+0

はい! omg-それを指摘してくれてありがとう - {私は心配し始めたときに最初に.rankと.ranksを使用することについて心配していました。 } ... ありがとうございました!! – KindeR66

+0

@ KindeR66よろしくお願いします!回答を受け入れたとマークすると、それは私を平等に幸せにするでしょう! :) – Vallentin

+0

私はまだこの問題を抱えているので私は自分の質問を編集しました(私はおそらく助けを得たいと思っています) - それを修正しました。ジャック、クイーン、そしてキングのトランプのために間違った価値をまだ得ている(名前を取り戻すだけ) – KindeR66

関連する問題