Boucle for dans une liste

aharon -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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.
0
aharon
 
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é
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
ou 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))
0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
Bonjour,

Tu n'as pas tenu compte des balises de code:

https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()
0