2017-04-16 68 views
0

我試圖找出我的代碼出了什麼問題。我試圖得到正確的結果,但它出來總是隨機答案。舉例來說,我洗牌[V,V,V,A,V]我希望結果是[4,1],但是它會以[2,1,2]出現。你可以幫我嗎 ?python 3.5的Itertools(groupby函數)

class Combinaison: 

    types_cartes = [ 
     Carte.AS, Carte.ROI, Carte.DAME, Carte.VALET, Carte.DIX, Carte.NEUF 
    ] 

    def __init__(self, des=None): 
     self.nb_lancers = 1 
     if des is None: 
      self.des = self._lancer_des(5) 
     else: 
      self.des = des 
    def determiner_type_combinaison_sans_as(self): 

     valeurs = [len(list(group)) for key, group in groupby(des)] 
     valeurs.sort(reverse=True) 

     sequence1 = [0, 1, 2, 3, 4] 
     sequence2 = [1, 2, 3, 4, 5] 

     if valeurs == sequence1 or valeurs == sequence2: 
      return " straight " 

     elif valeurs[0] == 5: 
      return " five of a kind " 

     elif valeurs[0] == 4: 
      return " four of a kind " 

     elif valeurs[0] == 3: 
      if valeurs[1] == 2: 
       return " Fullhouse " 
      else: 
       return " three of a kind" 

     elif valeurs[0] == 2: 
      if valeurs[1] == 2: 
       return " two pairs" 
      else: 
       return " one pair" 

     else: 
      return " nothing good, reshuffle" 

class Carte(Enum): 
    """Énumeration des types de cartes.""" 
    AS = 0 
    ROI = 1 
    DAME = 2 
    VALET = 3 
    DIX = 4 
    NEUF = 5 

    def __str__(self): 
     if self == Carte.AS: 
      return "A" 
     if self == Carte.ROI: 
      return "R" 
     if self == Carte.DAME: 
      return "D" 
     if self == Carte.VALET: 
      return "V" 
     if self == Carte.DIX: 
      return "X" 
     if self == Carte.NEUF: 
      return "9" 

回答

1

您需要先篩選groupby。它通過平等分割一個迭代。它不累積組。

valeurs = [len(list(group)) for key, group in groupby(sorted(des))] 

但它可能是最好使用collections.Counter

valeurs = Counter(des).values() 
+0

確定虐待嘗試感謝! –