2017-03-13 5 views
0

私は現在、特定の質問でトランプカードのリストを取り、クラスを使用してRoyal Flushであるかどうかを判断する課題に取り組んでいます。Pythonの属性とメソッドの使い方が分かりません

講師は、彼が書いた部分を変更することなく、残りの部分を構築しなければならないコードのスケルトンを提供しました。

#Lecturer created... 
class PokerHand(Hand): 

    def __init__(self, cards = list()): 
     Hand.__init__(self, cards) 

     self.handRank = 0 
     self.hand = "High Card" 

     #I have so far added this part... 
     total_value = 0 
     val_card_b4 = 0 
     for card in self.cards: 
      if Card.getValue(card) > val_card_b4: 
       total_value += Card.getValue(card) 
       val_card_b4 = Card.getValue(card) 
       checkRoyalFlush() 
     #...to here. However it throws an error that checkRoyalFlush isn't defined.   

    #The lecturer then had what is below already added. 
    def checkHand(self): 

     if self.checkRoyalFlush(): 
      self.handRank = 9 
      self.hand = "Royal Flush" 
      print("Test") 

Iすでに私はカードを作成することができます以前の問題のCardクラスを作成しているobjectカードの値を取得する(A=11, 2-10 equal face value etc.

私の問題は、私はカードを確認したら、ということです私はcheckHandメソッドでif self.checkRoyalFlush():ステートメントを「アクティブにする」方法を知りません。

私が実行して取得する必要がありますコードは次のとおりです。

h1 = PokerHand([Card('hearts', '10'), Card('clubs', '10'),Card('hearts', '2'),Card('hearts', '3'),Card('spades', 'J')]) 
h1.show() 
print(h1.checkHand()) 

私は研究ロンドの時間を費やしているし、それを把握することはできませんように私は、if文の作業を取得する方法を理解したいと思います。私は、Pythonの初心者であり、オブジェクト指向の新しい側面です。

編集:私はまた、「checkRoyalFlush」を定義する方法がわからない、それはより多くのエラーを取得せず

+0

自分で 'self.checkRoyalFlush()'を書く必要があると仮定します。 'checkHand'を呼び出すことによって呼び出されます。 – Morgoth

+0

@Morgoth、はい、私は実際にはthnksと言って私のQを編集する必要があります。私は実際にそれを定義する方法、あるいはそれを最初に等しいものにすることを実際には知らない。 – Gurfuffle

+1

@Gurfuffleそれは方法になりたいと思われる。 'def checkHand(self):'メソッドと同様に定義してください。 –

答えて

1

などif self.checkRoyalFlush():などif文がすなわちTrueまたはFalse、結果としてブールデータ型が必要です。あなたの方法は、それらの値のいずれかを返す必要があります:

#Lecturer created... 
class PokerHand(Hand): 

    def __init__(self, cards = list()): 
     # etc... 

    def checkHand(self): 
     # etc... 

    # add your new method below the methods that already exist 
    def checkRoyalFlush(self): 
     # paste your code to check if it is a royal flush here 
     # if it is a royal flush, then: 
      return True 
     # if it is NOT a royal flush, then: 
      return False 

はまた、あなたはそれがクラスPokerHandの一部であるとしてself.checkRoyalFlush()としてあなたの方法を参照する必要があります。あなたはcheckHand()メソッドでそれをやっていません。

1

貴方の講師がcheckRoyalFlush()と呼ばれる方法を望んでいるようです。あなたの手がロイヤルフラッシュであればtrue、そうでない場合はfalseが返ってくると思います。

また、私はあなたのカードクラスをどのように設定するのか分かりませんし、あなたがスーツやバリュー属性と呼んでいるものはわかりません。以下のコードでは、suit属性には.suit、value属性には.valueを呼び出します。それをあなたが作ったものに変更してください。カードリストのうちの一枚のカードのスーツがかかります

class PokerHand: 
    def __init__(self, cards = list()): 
     #your init goes here as above 

    def checkHand(self): 
     #checkHand as above 

    def checkRoyalFlush(self):   
     check_suit = cards[0].suit #note I don't know what you are calling the suits and values in your hand, 
     values = ['A','K','Q','J','10'] #values we want to check against 
     for each_card in cards: 
      if not (each_card.typing == check_suit and each_card.value in values): 
       return False 
      values.remove(each_card.value) #once we found a value we want to remove it from the possible list 
     return True 

方法checkRoyalFlush()

は、以下のコードを考えてみましょう。ロイヤルフラッシュには同じ訴訟がなければならないので、どのカードを選ぶかは関係ありません。ここでは、リストの最初のカードを選択します。

は、その後、私はcardsリストを反復と同じですされていない場合、カードのタイピングのそれぞれをチェックし、それぞれの値は、値リストにある場合

あれば一枚のカードの要件と一致していないで、それをFalseを返します。

私たちがチェックした値を削除して、値が重複していないことを確認します。 forループのチェックが終了してFalseを返す場合、ロイヤルフラッシュであることがわかります

これは最も適切な方法ではありませんが、これを明確にする方法の1つです。

+0

@Gurfuffleが私の答えを更新しました – MooingRawr

関連する問題