2017-04-16 53 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

确定虐待尝试感谢! –