Comment trouver une suite de poker dans une liste

Résolu/Fermé
Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017 - Modifié le 27 nov. 2017 à 01:13
Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017 - 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.

2 réponses

yg_be Messages postés 21102 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 février 2023 1 310
27 nov. 2017 à 08:06
bonjour, pourquoi penses-tu que pour i=3 suite deviendra faux? à quelle ligne devient-il faux?  
0
Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017 1
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
0
yg_be Messages postés 21102 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 février 2023 1 310 > Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017
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
0
Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017 1
27 nov. 2017 à 19:45
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
0
yg_be Messages postés 21102 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 février 2023 1 310
27 nov. 2017 à 19:47
pourquoi faire simple quand on peut faire compliqué?
peux-tu marquer comme résolu?
0
Saens Messages postés 10 Date d'inscription lundi 27 novembre 2017 Statut Membre Dernière intervention 28 novembre 2017 1
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
0