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

Programmation multimédia/Jeux Python Discussion :

Supprimer les guillemets dans une liste [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Supprimer les guillemets dans une liste
    Bonjour,

    Je m'essaie à Python et Pygame en développant un petit jeu de plateforme, mais je bute sur un problème incompréhensible : lorsque j'ouvre un fichier et récupère ses données, il me place des guillemets comme suit :

    >>> print(structure)
    [['0', '0', '0', '0'], ['0', '0', '0', '0'], ['0', '1', '0', '1'], ['0', '1', '1', '1']]
    alors que je voudrais :

    [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 1], [0, 1, 1, 1]]
    et alors que le contenu du fichier texte ("cartedujeu.txt") est le suivant :

    0000
    0000
    0101
    0111
    (je simplifie évidemment la map pour la clarté de l'exposé)

    Voici le bout de code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    structure = 0
    with open("cartedujeu.txt", "r") as cartedujeu:  
        structure_cartedujeu = [] 
        for ligne in cartedujeu:   
            ligne_map = []             
            for sprite in ligne:  
                if sprite != '\n':  
                    ligne_map.append(sprite)
            structure_cartedujeu.append(ligne_map) 
        structure = structure_cartedujeu
    Je suis convaincu que le problème vient de ce bout de code-là, car ça marche quand je définis moi-même la liste contenant les listes (en définissant la structure sans passer par un autre fichier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    structure = []
    ligne1 = [0,0,0,0]
    ligne2 = [0,0,0,0]
    ligne3 = [0,1,0,1]
    ligne4 = [0,1,1,1]
    structure = [ligne1, ligne2, ligne3, ligne4]
    Vous y comprenez quelque chose ? Ça ne doit pas être sorcier mais je ne trouve nulle part l'explication sur internet (et je n'arrive pas à non plus à une solution bricolée en demandant de supprimer les guillemets).

    Bien à tous,
    JB

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    '0' ou '1' sont des chaînes de caractères sous forme littérale alors que 0 ou 1 sont des nombres.
    Et si vous voulez convertir des digits en entiers, il suffit de leur appliquer int.
    Dit autrement, les guillemets n'existent pas: la chaîne de caractère est de longueur 1. C'est juste une indication que Python donne pour signaler le type de l'objet affiché.
    Vous y comprenez quelque chose ? Ça ne doit pas être sorcier mais je ne trouve nulle part l'explication sur internet (et je n'arrive pas à non plus à une solution bricolée en demandant de supprimer les guillemets).
    Pour trouver des réponses, il faut poser de bonnes questions... Et ici la question serait plutôt comment convertir un entier sous forme de chaîne de caractères en type entier... Mais pour poser cette question, il faut déjà avoir assimilé quelque bases de la programmation (ne serait ce que pour savoir que les données ont un type, qu'un fichier sera toujours une séquence de caractères,...) et passé du temps dans un tuto.

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

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ce qui est lu depuis un fichier, comme depuis le clavier, c'est du texte. Donc pas des nombres ni toutes autres choses.

    Pour convertir un type d'objet on peut utiliser le nom du type lui-même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> int("5")
    5
    >>> bool(1)
    True
    Lorsque l'on a une série d'objets dont on est sûr qu'ils sont du même type on peut utiliser map.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> l = ["0", "8", "547", "632"]
    >>> m = map(int, l)
    >>> list(m)
    [0, 8, 547, 632]

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci à tous les deux, et particulièrement à VinsS, pour vos réponses !

    J'ai le souvenir d'un temps où l'on pouvait poser une question sur un forum sans être un expert et sans recevoir une leçon de morale. Pour m'expliquer : je suis désolé, Wiztricks, d'avoir du mal à digérer l'ensemble des pré-requis pour commencer à coder. Je me suis laissé dire que mettre la main à la pâte était une bonne méthode et c'est ce que je fais, en lisant des tutos, je vous prie de m'excuser. En l'occurrence, j'ai potassé très en détail celui-ci :
    http://sdz.tdct.org/sdz/interface-gr...ur-python.html
    Il est vraiment excellent mais, précisément, pour le dernier exercice DK Labyrinthe, il est trop laconique dans ses explications. Or, j'éprouve des difficultés à adapter sa méthode de génération d'une carte à un autre jeu, de plateforme (j'essaie de me passer de son recours aux classes, dont j'ai du mal à bien comprendre la logique).

    Bref. Merci pour votre réponse, qui a partiellement répondu à mon problème : en effet, avec int(ma_variable), je peux afficher comme je le souhaitais.

    Mais, en fait, si je n'ai pas trop cherché à convertir un caractère en un nombre, c'est que ce n'était pas vraiment... mon objectif. Les 0 et les 1 étaient presque là par hasard. A l'origine, j'avais surtout des lettres dans mon tableau, un peu dans le jeu de labyrinthe ci-dessus, et j'échouais - bêtement - à les faire reconnaître aussi (mais je viens de résoudre ce problème-là par ailleurs).

    Bref, encore merci pour vos réponses, et désolé - sincèrement - d'avoir posé la question un peu vite, mais bon, quand on a passé des heures à résoudre des problèmes de code, je pensais naïvement offrir à quelqu'un l'occasion de briller à peu de frais !

    Bien à vous,
    JB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] Supprimer un élément dans une liste
    Par myjuna dans le forum Langage
    Réponses: 15
    Dernier message: 06/08/2014, 11h49
  2. Supprimer les doublons dans une liste
    Par inforum dans le forum SL & STL
    Réponses: 2
    Dernier message: 22/11/2009, 15h21
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. Réponses: 6
    Dernier message: 29/04/2007, 18h59
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

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