Boucle for dans une liste

Bonjour,

J'essaie actuellement de recréer un jeu de belote sur python mais je galère sur une annonce.
Concrètement, j'ai un deck de 8 cartes qui est une liste =['V de pique‘, 'D de coeur',....] et je cherche à trouver s'il y'a un 'V' (de n'importe quelle couleur) et deux 'A'. Je me suis donc dit que j'allais faire une boucle for sur les couleurs (liste couleur=['pique','coeur','trefle','carreau'] et mettre un if 'V' (if 'A') in deck

Mais ça ne marche pas et je ne sais pas comment faire une boucle sur un élement précis d'une liste (ici la couleur)...

Est-ce que vous avez une idée?

Cordialement
Aharon

3 réponses

  1. Contributeur
    bonjour,
    peux-tu montrer ton code?
    merci de tenir compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    je pense que ce n'est pas une bonne idée de représenter une carte par un texte tel que "V de pique", il est préférable de la représenter via ces deux attributes, valeur et couleur.

    je me demande d'où te vient l'idée de faire une boucle sur les couleurs, plutôt qu'une boucle sur les cartes du deck.
    1. Bonjour. Merci de votre réponse et voici mon code:

      couleurs=["carreau","coeur","trefle","pique"]
      valeurs=['7',"8","9","10","V","D","R","A"]
      points=[0,0,0,10,2,3,4,11]
      points_atout=[0,0,14,10,20,3,4,11]
      contrats=[80,90,100,110,120,130,140,150,160,170,180,"capot"]

      class Carte:

      def __init__(self,valeur,couleur):
      self.couleur = couleur
      self.valeur = valeur

      def __eq__(self,other):
      return self.couleur == other.couleur and self.valeur == other.valeur
      def __repr__(self):
      return f'{self.valeur} de {self.couleur}'

      class Coinche:

      def __init__(self):

      self.deck = [Carte(valeur,couleur) for couleur in couleurs for valeur in valeurs]

      def distribution(self):
      melange=random.sample(self.deck,len(self.deck))
      #print(melange)

      self.deck1=sum([melange[i:i+4] for i in range(0,len(melange),16)],[])
      print("Nord:",self.deck1)
      self.deck2=sum([melange[i:i+4] for i in range(4,len(melange),16)],[])
      #print("Est:",self.deck2)
      self.deck3=sum([melange[i:i+4] for i in range(8,len(melange),16)],[])
      #print("Sud:",self.deck3)
      self.deck4=sum([melange[i:i+4] for i in range(12,len(melange),16)],[])
      #print("Ouest:",self.deck4)
      return self.deck1,self.deck2,self.deck3,self.deck4

      def prem(self):
      deck_nord=self.deck1
      #print(deck_nord)
      encheres=0
      cnt=0
      if 'V de pique' or 'V de trefle' or 'V de coeur' or 'V de carreau' in deck_nord:
      #if Carte(valeur,couleur) in deck_nord:
      #if ('V de',f'{self.couleur}') in deck_nord:
      #for cartes in deck_nord
      for coul in couleurs:
      print(f'A de {coul}')
      if f'A de {coul}' in deck_nord:
      cnt+=1
      if cnt>=2:
      encheres+=80
      print("Nord annonce:",[encheres],"de", f'{Cartes(couleur)}')
      else:
      print("Nord passe",encheres)

      Je dois surement très mal expliquer mon problème mais j'arrive à faire une boucle sur une liste en utilisant:
      for couleur in couleurs:
      if f'V de {couleur} in l:

      et ça semble marcher mais je sais pas si c'est optimisé
      1. Contributeur
        un exemple pour compter les as et les valets:
        mondeck=[Carte("V","P"),Carte("V","C"),Carte("V","PK"),Carte("V","T"),
                 Carte("A","P"),Carte("A","P"),Carte("A","P"),Carte("A","P")]
        cntV=0
        cntA=0
        for carte in mondeck:
            if carte.valeur=="A":
                cntA += 1
            elif carte.valeur=="V":
                cntV += 1
        print (mondeck)
        print(cntA,cntV)
      2. Contributeur
        @yg_beou bien:
        def cntAV(undeck):
            cntV=0
            cntA=0
            for carte in undeck:
                if carte.valeur=="A":
                    cntA += 1
                elif carte.valeur=="V":
                    cntV += 1
            return cntA,cntV
        deckun,deckdeux,decktrois,deckquatre=Coinche().distribution()
        print (deckun)
        print ("nombre d'as et de valets:",cntAV(deckun))