Boucle for dans une liste
aharon
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Boucle for dans une liste
- Liste déroulante excel - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
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.
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.
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é
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é
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)
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) :
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()