Un jeu de bataille spéciale en python

Résolu
Bonjour,

Je dois faire une simulation d'un jeu de bataille en python.
Les règles sont un peu différente d'une partie normale:

- une carte noire est toujours plus forte qu'une rouge.
- si les deux cartes sont rouges, la plus forte est celle avec la plus petite valeur
- si les deux cartes sont noirs, la plus forte est celle avec la plus grande valeur.

Celui qui a la plus forte carte gagne les deux cartes mais ne les remet pas dans son paquet.
Si il y a égalité, les deux cartes sont écartées.
Et enfin la manche s'arrête quand les 2 joueurs sont arriver à la fin de leur paquet.

Voici le code que j'ai déjà fait:

from random import *
jeu = []
for c in ["pique", "coeur", "trèfle", "carreau"]:
for v in range (1,14):
carte = (v,c)
jeu.append(carte)

joueur1 = []
joueur2 = []

def distribution():
shuffle(jeu)
for i in range(0,52,2):
cartej1 = jeu[i]
joueur1.append(cartej1)
cartej2 = jeu[i+1]
joueur2.append(cartej2)
return joueur1, joueur2

gainj1 = []
gainj2 = []
cartes_ecartees = []

def partie():
for k in range(0, 26):
carte1 = joueur1[k]
carte2 = joueur2[k]
if carte1[1] == "pique" or "trèfle":
if carte2[1] == "coeur" or "carreau":
gainj1.append(carte1)
gainj1.append(carte2)
elif carte2[1] == "pique" or "trèfle":
if carte1[0] > carte2[0]:
gainj1.append(carte1)
gainj1.append(carte2)
elif carte1[0] < carte2[0]:
gainj2.append(carte1)
gainj2.append(carte2)
elif carte1[0] == carte2[0]:
cartes_ecartees.append(carte1)
cartes_ecartees.append(carte2)

elif carte1[1] == "coeur" or "carreau":
if carte2[1] == "pique" or "trèfle":
gainj2.append(carte1)
gainj2.append(carte2)
elif carte2[1] == "coeur" or "carreau":
if carte1[0] < carte2[0]:
gainj1.append(carte1)
gainj1.append(carte2)
elif carte1[0] > carte2[0]:
gainj2.append(carte1)
gainj2.append(carte2)
elif carte1[0] == carte2[0]:
cartes_ecartees.append(carte1)
cartes_ecartees.append(carte2)
return len(gainj1), len(gainj2)


Mon problème est que le joueur 1 gagne toujours toutes les cartes (gainj1 = 52 quand on exécute la fonction "partie()" ) et je ne comprends pas pourquoi.

En espérant que vous pourrez m'aider,
Merci d'avance.

3 réponses

  1. Contributeur
    bonjour,
    pourquoi ne nous montres-tu pas le programme complet?
    merci de bien spécifier le langage quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    0
    1. Désolé mais je ne comprends pas, j'ai mis l'entièreté du programme que j'ai fais. Que manquerais t-il ?
      Merci pour le conseil, je ne vois pas de manière de modifier la question, dois-je en recréer une ?
      0
    2. Contributeur
      @BQuent1il manque l'appel à la fonction partie(). chez moi, cet appel provoque une erreur.
      pas utile de modifier la question, tu peux éventuellement montrer le code dans un commentaire.
      0
    3. @yg_beL'appel de la fonction partie() se fait dans la console pour moi... tout comme l'appel de la fonction distribution(). Savez vous quelle erreur elle provoque ?

      d'accord merci, voici le code avec le bon language:

      from random import *
      jeu = []
      for c in ["pique", "coeur", "trèfle", "carreau"]:
          for v in range (1,14):
              carte = (v,c)
              jeu.append(carte)
      
      joueur1 = []
      joueur2 = []
      
      def distribution():
          shuffle(jeu)
          for i in range(0,52,2):
              cartej1 = jeu[i]
              joueur1.append(cartej1)
              cartej2 = jeu[i+1]
              joueur2.append(cartej2)
          return joueur1, joueur2
      
      gainj1 = []
      gainj2 = []
      cartes_ecartees = []
      
      def partie():
          for k in range(0, 26):
              carte1 = joueur1[k]
              carte2 = joueur2[k]
              if carte1[1] == "pique" or "trèfle":
                  if carte2[1] == "coeur" or "carreau":
                      gainj1.append(carte1)
                      gainj1.append(carte2)
                  elif carte2[1] == "pique" or "trèfle":
                      if carte1[0] > carte2[0]:
                          gainj1.append(carte1)
                          gainj1.append(carte2)
                      elif carte1[0] < carte2[0]:
                          gainj2.append(carte1)
                          gainj2.append(carte2)
                      elif carte1[0] == carte2[0]:
                          cartes_ecartees.append(carte1)
                          cartes_ecartees.append(carte2)
      
              elif carte1[1] == "coeur" or "carreau":
                  if carte2[1] == "pique" or "trèfle":
                      gainj2.append(carte1)
                      gainj2.append(carte2)
                  elif carte2[1] == "coeur" or "carreau":
                      if carte1[0] < carte2[0]:
                          gainj1.append(carte1)
                          gainj1.append(carte2)
                      elif carte1[0] > carte2[0]:
                          gainj2.append(carte1)
                          gainj2.append(carte2)
                      elif carte1[0] == carte2[0]:
                          cartes_ecartees.append(carte1)
                          cartes_ecartees.append(carte2)
          return len(gainj1), len(gainj2)
      0
    4. Contributeur
      @BQuent1montre alors comment tu fais ces appels: comment pourrions nous deviner ce que tu fais dans la console?
      il est préférable de les inclure dans le code partagé.
      0
    5. @yg_beC'est vrai désolé, j'écris simplement le nom de la fonction dans la console pour qu'elle s'éxecute:

      >>>distribution()

      ou
      >>>partie()
      0