2017-05-07 7 views
1

を満たしている場合にのみ真を返す関数、私はソリティアのゲームを設計しています2つの条件が

場合は基本的に、私は人が勝つ聞かせできるようにしたい:カードが入っていない

  1. 最初の杭の上に

  2. すべてのカードは、他の山の1

I上にありますこれを行うにはn個ため、私は唯一の私の機能が欲しい、これらの条件の両方が、私は今のところこれを持って満たしている場合にtrueを返します:

def Win(self): 

    test1 = 0 
    test2 = 0 

    if self.t[0].size() == 0: 
     test1 = True 

    for pile in self.t: 
     if pile.size() == self.__CardNo: 
      test2 = True 

    if test1 == True and test2 == True: 
     return True 

    else: 
     return False 

答えて

0

次のようなものまでWin()を簡素化を検討できます。

def Win(self): 

    if sum(pile.size() for pile in self.t) == self.__CardNo: 
     return self.t[0].size() == 0 

    return False 
0

コードが改善され、コンパイルの結果をわかりやすい名前の変数に割り当てることができます。たとえば:

def has_won(self): 
    first_pile_empty = 0 == len(self.piles[0]) 
    other_piles_full = self.CARD_COUNT == sum(len(pile) for pile in self.piles[1:]) 
    return first_pile_empty and other_piles_full 

あなたは私はあなたのコードにはいくつかの他のスタイルの調整を行うために自由を撮影した注意しましょう:

  • has_won()Win()の名前を変更しました。
  • リニューアルself.t~self.piles
  • パイル上のカードをカウントする方法が変更されました。size()から__len__()に変更されました。
  • 名前が変更された__CardNoCARD_COUNT(クラス変数であると仮定します)。

あなたのコードの他の部分をリファクタリングした後にプレーヤーが勝ったかどうかを判断する良い方法があるかもしれませんが、各結果パイルの一番上のカードをチェックするだけで十分でしょう後で調整する。

関連する問題