Comment trouver une suite de poker dans une liste [Résolu]

Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention - 27 nov. 2017 à 01:11 - Dernière réponse : Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention
- 27 nov. 2017 à 20:20
Bonjour,


Je suis en train de coder un programme de poker et j'ai un soucis pour détecter si il y a une suite dans les 7 cartes disponibles.

J'utilise un fonction qui renvoie une liste avec que les valeurs numériques de la carte, exemple :
liste = [ 13, 1, 10,4,5,6,9] où 11 est la valet etc

Mais je n'arrive pas à detecter s'il y a une suite dans cette liste.

Voici ce que j'ai fait :

def supp_elem_recurr(lst):
  ''' delete les elements apparaisant + d'1 fois, lst est une liste en ordre croissant''' 
  for u in range(len(lst)):
         if u < len(lst)-1:
             if lst[u] == lst[u+1]:
                 del lst[u]
  return lst


liste = [1,4,5,6,2,8,11]

def est_suite(liste):
    liste.sort()
    liste = supp_elem_recurr(liste)
    if len(liste) < 5 :
        suite = False
    elif 1 in liste and 10 in liste and 11 in liste and 12 in liste and 13 in liste :
        suite = True
    else : # prend le "suite" que du dernier i --> pas correct
        for i in range(len(liste)-4): # mettre suite = False sinon
            if liste[i] == liste[i+1]-1 == liste[i+2]-2 == liste[i+3]-3 == liste[i+4]-4 :
                suite = True
    return suite




Je fais en sorte d'avoir une liste en ordre croissant et je supprime les doublons. Mais dans la boucle for, la variable suite ne prend pas que la valeur pour le dernier i du for. Par exemple, si la liste commence par une suite. pour i = 0, liste sera True mais avec i =3, liste sera False pourtant on a trouvé une suite plus tot.

Merci d'avance pour l'aide.
Afficher la suite 
10Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention

6 réponses

Répondre au sujet
yg_be 4076 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention - 27 nov. 2017 à 08:06
0
Utile
2
bonjour, pourquoi penses-tu que pour i=3 suite deviendra faux? à quelle ligne devient-il faux?  
Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention - 27 nov. 2017 à 11:23
j'ai oublié

else :
suite = False

avec le dernier if.

Imaginon que les 5 premieres cartes soient une suite et les 2 dernieres non. Mon programme va detecter la suite mais il va continuer de regarder plus loin. Et au final, il dira que suite = False , car la suite ne fait pas partie des 5 dernieres cartes
yg_be 4076 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention > Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention - 27 nov. 2017 à 19:28
pourquoi ne pas faire plutôt:
else : # prend le "suite" que du dernier i --> pas correct
        suite = False
        for i in range(len(liste)-4): # mettre suite = False sinon
            if liste[i] == liste[i+1]-1 == liste[i+2]-2 == liste[i+3]-3 == liste[i+4]-4 :
                suite = True
return suite
Commenter la réponse de yg_be
Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention - 27 nov. 2017 à 19:45
0
Utile
2
J'ai trouvé une solution :

def est_suite(table):
lis = liste_valeur(table)
lis.sort()
lis = supp_elem_recurr(lis)
suite_0 = False
suite_1 = False
suite_2 = False
if len(lis) < 5 :
suite = False
elif 1 in lis and 10 in lis and 11 in lis and 12 in lis and 13 in lis :
suite = True
else :
for i in range(len(lis)-4):
if lis[i] == lis[i+1]-1 == lis[i+2]-2 == lis[i+3]-3 == lis[i+4]-4 :
if i == 0:
suite_0 = True
elif i == 1:
suite_1 = True
elif i == 2:
suite_2 = True
if suite_0 or suite_1 or suite_2:
suite = True
else:
suite = False
return suite



table c'est les 7 couples de cartes recues.
liste_valeur() est une liste avec que les valeurs numériques des cartes (on retire les couleurs)
supp_elem_recurr(lis) supprime les doublons dans la liste
yg_be 4076 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 9 décembre 2017 Dernière intervention - 27 nov. 2017 à 19:47
pourquoi faire simple quand on peut faire compliqué?
peux-tu marquer comme résolu?
Saens 10 Messages postés lundi 27 novembre 2017Date d'inscription 28 novembre 2017 Dernière intervention - 27 nov. 2017 à 20:20
ta solution n'est pas correcte. Si il trouve une suite qu'au début et plus à la fin, la fonction va renvoyer False
Commenter la réponse de Saens