IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Jeu tic tac toe - IndexError: list index out of range


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut Jeu tic tac toe - IndexError: list index out of range
    Bonjour,
    Je dois fais une fonction pour faire un jeu tic tac toe comme exercice mais il y a un problème n'arrive pas a résoudre :

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    def verifier_diagonales(grille):
            """"une fonction verifier_diagonales qui prend en paramètre une liste de listes représentant une grille,
            et vérifie si cette grille contient une diagonale gagnante. La fonction renvoie 'X' (resp. 'O') si la grille
            contient une diagonale gagnante avec des 'X' (resp. des 'O'), et ' ' si aucune diagonale n'est gagnante.
            """
            r=''
            if grille[0][0]==grille[1][1]and grille[1][1]==[2][2]:
                if grille[0][0]=="X":
                    r="X"
                else:     
                    r="O"
            elif grille[0][2]==grille[1][1]and grille[1][1]==[2][0]:
                if grille[2][0]=="X":
                    r="X"
                else:     
                    r="O"   
            return r
    voici l'erreur:

    ----> 8         if grille[0][0]==grille[1][1]and grille[1][1]==[2][2]:
          9             if grille[0][0]=="X":
         10                 r="X"
    
    IndexError: list index out of range

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Artimusk Voir le message
    IndexError: list index out of range
    [2][2] c'est accéder au 3ème item de la liste [2] qui n'en contient qu'un... Vous vouliez faire quoi en écrivant cela mystère.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Artimusk Voir le message
    voici l'erreur: if grille[0][0]==grille[1][1]and grille[1][1]==[2][2]
    T'es sûr que t'as rien oublié dans ta comparaison ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut !

    Tic Tac Toe c'est quoi ça ? Ahhh le morpion ! ^^

    C'est pas très compliqué, faut vérifier si le premier élément de la 1ère liste et le second de la 2ème liste et le troisième de la 3ème liste valent O ou X et pareil pour l'autre diagonale.

    Je te propose une solution plus élégante, si ça peut te faire découvrir des choses :
    Pour avoir cette diagonale \ : [l[i] for i,l in enumerate(quadrillage)];
    Pour avoir l'autre diagonale / : [l[-i] for i,l in enumerate(quadrillage,1)].
    Ca te renvoit une liste, ex : ["O","O","O"].

    Un solution pour vérifier que toutes les valeurs d'une liste sont identiques c'est d'utiliser all(i == liste[0] for i in liste) ou encore tu peux faire plus joli : if any(liste) == all(liste) mais pour ça il faut que ça soit des 0 et des 1 au lieu des "O" et "X" . Pour comprendre comment fonctionne any() et all() je te donne un exemple et un lien vers la documentation officielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    >>> quadrillage = [[0,1,0],\
    		   [1,0,1],\
    		   [1,1,0]]
     
    >>> [l[i] for i,l in enumerate(quadrillage)]
    [0, 0, 0]
     
    >>> [l[-i] for i,l in enumerate(quadrillage,1)]
    [0, 0, 1]
     
    >>> any([0, 0, 0])
    False
    >>> all([0, 0, 0])
    False
     
    >>> all([0, 0, 1])
    False
    >>> any([0, 0, 1])
    True
     
    >>> any([1, 1, 1])
    True
    >>> all([1, 1, 1])
    True
    La documentation :
    https://docs.python.org/fr/3/library...ions.html?#all et #any juste en dessous.

    Bonne lecture !

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Salut !

    Tic Tac Toe c'est quoi ça ? Ahhh le morpion ! ^^

    C'est pas très compliqué, faut vérifier si le premier élément de la 1ère liste et le second de la 2ème liste et le troisième de la 3ème liste valent O ou X et pareil pour l'autre diagonale.

    Je te propose une solution plus élégante, si ça peut te faire découvrir des choses :
    Pour avoir cette diagonale \ : [l[i] for i,l in enumerate(quadrillage)];
    Pour avoir l'autre diagonale / : [l[-i] for i,l in enumerate(quadrillage,1)].
    Ca te renvoit une liste, ex : ["O","O","O"].

    Un solution pour vérifier que toutes les valeurs d'une liste sont identiques c'est d'utiliser all(i == liste[0] for i in liste) ou encore tu peux faire plus joli : if any(liste) == all(liste) mais pour ça il faut que ça soit des 0 et des 1 au lieu des "O" et "X" . Pour comprendre comment fonctionne any() et all() je te donne un exemple et un lien vers la documentation officielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    >>> quadrillage = [[0,1,0],\
    		   [1,0,1],\
    		   [1,1,0]]
     
    >>> [l[i] for i,l in enumerate(quadrillage)]
    [0, 0, 0]
     
    >>> [l[-i] for i,l in enumerate(quadrillage,1)]
    [0, 0, 1]
     
    >>> any([0, 0, 0])
    False
    >>> all([0, 0, 0])
    False
     
    >>> all([0, 0, 1])
    False
    >>> any([0, 0, 1])
    True
     
    >>> any([1, 1, 1])
    True
    >>> all([1, 1, 1])
    True
    La documentation :
    https://docs.python.org/fr/3/library...ions.html?#all et #any juste en dessous.

    Bonne lecture !


    Merci je vais essayer mais je ne peux pas utiliser de 1 et de 0 car la fonction doit renvoyer O si l'alignement est fais de O et X a l'inverse maudite consigne .

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Artimusk Voir le message
    Merci je vais essayer mais je ne peux pas utiliser de 1 et de 0 car la fonction doit renvoyer O si l'alignement est fais de O et X a l'inverse maudite consigne .
    Tu peux te contenter d'utiliser ça alors : all(i == liste[0] for i in liste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> liste = ["O","O","O"]
    >>> all(i == liste[0] for i in liste)
    True
    >>> liste = ["X","X","X"]
    >>> all(i == liste[0] for i in liste)
    True
    >>> liste = ["X","O","X"]
    >>> all(i == liste[0] for i in liste)
    False
    PS : Je ne suis pas certains que tu es le droit d'utiliser ça dans ton exercice si tu n'as pas encore vu ça... Mais c'est à mettre dans un coin de ton esprit !

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    T'es sûr que t'as rien oublié dans ta comparaison ???
    Non je crois pas pourrais tu me montré mon oublie ?

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Artimusk Voir le message
    Non je crois pas
    Oui ben moi je crois (sinon j'aurais pas posé la question) !!!

    Citation Envoyé par Artimusk Voir le message
    pourrais tu me montré mon oublie ?
    if grille[0][0]==grille[1][1]and grille[1][1]==[2][2] !!!

    Citation Envoyé par LeNarvalo Voir le message
    Tu peux te contenter d'utiliser ça alors : all(i == liste[0] for i in liste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> liste = ["O","O","O"]
    >>> all(i == liste[0] for i in liste)
    True
    >>> liste = ["X","X","X"]
    >>> all(i == liste[0] for i in liste)
    True
    >>> liste = ["X","O","X"]
    >>> all(i == liste[0] for i in liste)
    False
    len(set(liste)) == 1
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/07/2016, 23h35
  2. Besoin d'aide sur utilisation avancée d'un treeview
    Par Linux44 dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 09/05/2012, 12h39
  3. besoin d'aide merci de bien m'aider
    Par shs_pro dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/06/2007, 10h27
  4. Besoin d'aide ! Merci.
    Par les.coms dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo