Jeu de domino

Résolu/Fermé
PythonNoob - Modifié le 24 févr. 2023 à 03:50
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 - 27 févr. 2023 à 16:22

Bonjour,

je suis bloqué lorsqu'il faut compter le nombre de domino blancs dans mon jeu, mon programme en compte beaucoup trop alors qu'ils ne sont pas blancs.

def nbr_double_blanc():
  double_1 = 0
  blanc_1 = 0
  double_2 = 0
  blanc_2 = 0

  for i, j in joueur_1:
    j1 = Domino(i,j)
    if j1.EstDouble():
      double_1 += 1
    if j1.EstBlanc():
      blanc_1 += 1
    j1.AfficheDomino()

  for k,z in joueur_2:
    j2 = Domino(k,z)
    if j2.EstDouble():
      double_2 += 1
    if j2.EstBlanc():
      blanc_2 += 1
    j2.AfficheDomino()

  return f"le joueur 1 a : {double_1} doubles et : {blanc_1} blancs\nle joueur 2 a : {double_2} doubles et : {blanc_2} blancs"

#avec la classe :
class Domino:
  def __init__(self,valeur1,valeur2):
    self.valeur1 = valeur1
    self.valeur2 = valeur2

  def EstDouble(self):
    if self.valeur1 == self.valeur2:
      return True
    else:
      return False

  def EstBlanc(self):
    if self.valeur1 or self.valeur2 == 0:
      return True
    else:
      return False

  def CalculPoints(self):
    return self.valeur1 + self.valeur2

Pouvez-vous m'aider ?

Merci,

A voir également:

5 réponses

Salut, erreur classique.

Il faut comparer chaque valeur.


 

if self.valeur1 == 0 or self.valeur2 == 0:

   # ....

Ou encore :
 

if 0 in (self.valeur1, self.valeur2):

   # ....

A noter que tu peux simplifier la méthode EstDouble.

def EstDouble(self):

    return self.valeur1 == self.valeur2
1

Contrairement à d'autres, je ne peux pas colorer mon code. Je fais un test avec un bête copier-coller:

La fonction nbr_double_blanc() fait des choses en "double". On pourrait simplifier.

class Domino:
    def __init__(self, valeur1, valeur2):
        self.valeur1 = valeur1
        self.valeur2 = valeur2
    def EstDouble(self):
        return self.valeur1 == self.valeur2
    def EstBlanc(self):
        return self.valeur1 == 0 or self.valeur2 == 0
    def CalculPoints(self):
        returnself.valeur1 + self.valeur2
#
def nbr_double_blanc():
    double_1 = 0
    blanc_1 = 0
    double_2 = 0
    blanc_2 = 0
    for i, j in joueur_1:
       j1 = Domino(i, j)
       if j1.EstDouble():
           double_1 += 1
       if j1.EstBlanc():
           blanc_1 += 1
    j1.AfficheDomino()
    for i, j in joueur_2:
        j2 = Domino(i, j)
        if j2.EstDouble():
            double_2 += 1
    if j2.EstBlanc():
        blanc_2 += 1
        j2.AfficheDomino()
    return f"le joueur 1 a : {double_1} doubles et : {blanc_1} blancs\nle joueur 2 a : {double_2} doubles et : {blanc_2} blancs"
0

Bonjour,
 

Même en utilisant le forum sans être inscrit, on peut poster du code, c'est un forum informatique ;-)

il faut utiliser la dernière icône de la barre d'entête de l'éditeur de message  < >

class Domino:
    def __init__(self, valeur1, valeur2):
        self.valeur1 = valeur1
        self.valeur2 = valeur2
    def EstDouble(self):
        return self.valeur1 == self.valeur2
    def EstBlanc(self):
        return self.valeur1 == 0 or self.valeur2 == 0
    def CalculPoints(self):
        returnself.valeur1 + self.valeur2

Le premier avantage à s'inscrire, je m'en rappelle très bien, c'est de pouvoir retrouver simplement toutes les discussions où on est intervenu.
 

Cordialement


jee pee

0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801 > jee_pee
24 févr. 2023 à 03:44

J'approuve ce message, cela va m'éviter d'avoir à remettre en forme les messages de Pierrot :-) A moins que ce dernier n'utilise un navigateur en mode texte (aaaah w3m... :p)

0

 >> il faut utiliser la dernière icône de la barre d'entête de l'éditeur de message  < >
J'ai déjà précisé que j'étais aveugle et que j'utilisais une synthèse vocale.
Elle ne me donne pas accès à cette barre d'entête en mode édition.

0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
24 févr. 2023 à 04:02

Tiens d'ailleurs, question par curiosité, comment ton logiciel fait-il pour comprendre comment indenter ton code ? C'est toi qui lui dictes ? Et quand tu découvres le code de quelqu'un d'autre, comment fais-tu pour le comprendre sachant que l'indentation peut changer le sens du code en python ?

0

Si je fais Alt+Sup (supprime), ma synthèse me donne le numéro de colonne et de ligne.
Oui, c'est un peu pénible, mais je n'ai pas le choix.

J'ai bien Astyle, mais il ne marche pas en Python.

J'ai déjà écrit en Python un programme d'indentation simple pour C et C++

0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
24 févr. 2023 à 13:14

Intéressant, merci pour ces précisions. Je me demandais deux choses :

  • Comment fais-tu pour envoyer un message (qui nécessite normalement de cliquer sur valider / commenter) ; et pourquoi ce mécanisme ne te permet pas de cliquer sur un autre bouton du forum (notamment ceux qui permettent de mettre en forme tes message) ?
  • Si le forum mettait à disposition des balises de code (comme à l'époque), un peu comme sur stackoverflow (qui utilise la syntaxe markdown), j'imagine que ça deviendrait pour toi de mettre en forme ton travail ? Si oui, souhaiterais-tu que je remonte ce besoin aux personnes qui s'occupent du forum ?
  • Pour astyle, ça ne me surprend pas que ça n'existe pas en python puisque comme je le disais, l'indentation peut changer le sens. En conséquence, si l'indentation est décidable pour des langages qui n'en dépendent pas (par exemple C, C++), ce n'est donc plus le cas pour Python.
    • Dans l'extrait de code du message initial, le code n'était pas indenté et je l'ai ré-indenté moi-même. La syntaxe et les variables locales m'ont permis de savoir comment l'indenter, mais par moment il m'a fallu me demander ce que PythonNoob avait vraisemblablement codé.
    • Typiquement, la ligne 13 (qui sert à l'affichage du domino) aurait très bien pu (syntaxiquement parlant) être en dehors de la boucle for, et ça, astyle ne peut pas le décider.

Merci pour tes précisions

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

Je ne ppeux pas expliquer exactement comment ça se passe.
Mais les boutons en "dehors" de la zone d'édition me sont accessibles alors que ceux qui sont associés à la zone d'édition ne le sont pas.
J'ai toujours associé cela à l'utilisation de la souris, mais je ne peux pas le confirmer.
Est-ce que la barre d'entête requière l'utilisation de la souris?
Or, ma synthèse vocale ne me permet pas d'utiliser la souris.
Au sujet du second point, le site ZesteDeSavoir fonctionne directement avec l'éditeur Markdown.
Je ne connais pas parfaitement Markdown, mais je peux faire les choses suivantes:
+ colorer mon code (Python, C ou C++)
+ Faire des citations.
+ faire des listes numérotées ou non.
+ Faire de l'italique et du caractère gras.
+ Inclure correctement un lien genre html.
Je connais un peu le html et le css (le css est peu utile pour moi).

J'avais commencé à écrire un petit programme d'indentation pour Python, mais il n'est pas terminé. J'écrirais les choses comme suit:
if ... :#1
bla bla bla
:#1
qui donnerait:
if ... :
    bla bla bla
La syntaxe :#numéro serait comme un {
et le :#numéro en colonne 1 serait comme le }
Je vérifierais que les niveaux sont jumelés correctement.
Plus de 9 niveaux d'indentation serait absurde. C'est plus clair avec des fonctions.

0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
27 févr. 2023 à 16:22

Merci pour ces précisions. Concernant les boutons de mises en forme, tu peux les utiliser à la souris ou avec les raccourcis clavier :

  • ctrl+B pour le gras ;
  • ctrl+I pour l'italique ;
  • ctrl+U pour le souligné ;
  • ctrl+K ou ctrl+L pour faire un lien.

Il n'y a malheureusement pas de lien pour les autres boutons (puces, sections de code, images, tableau, séparateur, citations).

0