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 :

Aide pour exercice Python


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut Aide pour exercice Python
    Bonjour,

    Je suis nouveau sur le Forum et je suis débutant en langage Python. J'ai un exercice en python et j'aimerais un peu d'aide afin de perfectionner mon code.

    Le but de mon exercice est de former (à l'aide d'une fonction) une grille à partir d'une liste.
    Avec la liste : [["o","o","o","o","o","o","o","o","o"],["o","o",".",".",".",".",".","o","o"],["o",".",".",".",".",".",".",".","o"],["o",".",".",".",".",".",".",".","o"],["o","o",".",".",".",".",".","o","o"],["o","o","o","o","o","o","o","o","o"]]

    mon but est d'afficher ceci :

    ooooooooo
    oo.....oo
    o.......o
    o.......o
    oo.....oo
    ooooooooo (C'est censé former une grille mais avec l'affichage du forum les éléments ne sont pas alignés)

    J'ai donc cherché une solution et mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    arche_vide = [["o","o","o","o","o","o","o","o","o"],["o","o",".",".",".",".",".","o","o"],["o",".",".",".",".",".",".",".","o"],["o",".",".",".",".",".",".",".","o"],["o","o",".",".",".",".",".","o","o"],["o","o","o","o","o","o","o","o","o"]]
     
     
     
    def affiche_grille(lst):
    	for i in range (len(lst)):
    			print ((lst[i][0]) + (lst[i][1]) + (lst[i][2]) + (lst[i][3]) + (lst[i][4]) + (lst[i][5]) + (lst[i][6]) + (lst[i][7]) + (lst[i][8]))
     
    affiche_grille(arche_vide)
    Ce code fonctionne et affiche ma grille mais j'aurais aimer utiliser une boucle afin d’éviter d'écrire un si long "print".

    J’espère avoir été clair, merci d'avance pour vos réponses.

    Bonne journée

    Fliiwyk

  2. #2
    Membre actif
    Homme Profil pro
    apprenti
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Par défaut
    Bonjour,
    En effet il te manque pas grand chose :

    Citation Envoyé par Fliiwyk Voir le message
    def affiche_grille(lst):
    for i in range (len(lst)):
    print ((lst[i][0]) + (lst[i][1]) + (lst[i][2]) + (lst[i][3]) + (lst[i][4]) + (lst[i][5]) + (lst[i][6]) + (lst[i][7]) + (lst[i][8]))

    affiche_grille(arche_vide)[/CODE]
    Une fois que tu créer ta boucle qui parcour lst, ce que tu voudrais/dois faire, c'est parcourir la seconde liste qui est à l'indice (dans ton code ) i. ( Car oui c'est bien une liste de liste que tu as la).

    Donc avec un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range(len(lst)) :
        for j in range(lst[i]) : #c'est ce que j'essayai de t'expliquer, tu parcours une autre liste qui est à l'indice i de ta liste initiale
            #Maintenant tu peut donc faire : 
            print(list[i][j])
    Le bout de code si-dessus ne répond pas à ton besoins mais je te conseil de l'exécuter pour voir ce que cela donne
    Car le fait que tu print lettre par lettre va te posser problème car il va mettre tous les caractère sur une seul ligne, pour contrer ça tu as au moins 2 solutions :

    1ère (recommandé): tu concatènes tes lettres dans un string puis tu print le string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(len(lst)) :
        mot = ""
        for j in range(lst[i]) : #c'est ce que j'essayai de t'expliquer, tu parcours une autre liste qui est à l'indice i de ta liste initiale
            #Maintenant tu peut donc faire : 
            mot = mot +lst[i][j] # tu peux mettre : mot += lst[i][j] si tu as vu l'expression, ( c'est l'abréviation de mot = mot + variable)
        print(mot)
    2ème solution qui est moins élgante et non recommandé dans ton cas je pense c'est d'utiliser la fonction join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(len(lst)) :
        print("".join(lst[i]) #join te rassemble tout les éléments de ta liste passé en paramètre en les collant avec la chaine que tu mets avant, ici ont veut rien entre les éléments de lst[i]
    J'ai essayé de t'expliquer ( pour ne pas te donner que la réponse ), donc j'espère que tu auras compris

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 720
    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 720
    Par défaut
    Salut,

    Citation Envoyé par Fliiwyk Voir le message
    Ce code fonctionne et affiche ma grille mais j'aurais aimer utiliser une boucle afin d’éviter d'écrire un si long "print".
    Vous pouvez aussi demander à print de ne pas aller à la ligne via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range (len(lst)):
         for j in range(len(lst[i]):
              print(lst[i][j], end= '')
         print()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    Citation Envoyé par antoineRp0 Voir le message
    Bonjour,
    En effet il te manque pas grand chose :



    Une fois que tu créer ta boucle qui parcour lst, ce que tu voudrais/dois faire, c'est parcourir la seconde liste qui est à l'indice (dans ton code ) i. ( Car oui c'est bien une liste de liste que tu as la).

    Donc avec un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range(len(lst)) :
        for j in range(lst[i]) : #c'est ce que j'essayai de t'expliquer, tu parcours une autre liste qui est à l'indice i de ta liste initiale
            #Maintenant tu peut donc faire : 
            print(list[i][j])
    Le bout de code si-dessus ne répond pas à ton besoins mais je te conseil de l'exécuter pour voir ce que cela donne
    Car le fait que tu print lettre par lettre va te posser problème car il va mettre tous les caractère sur une seul ligne, pour contrer ça tu as au moins 2 solutions :

    1ère (recommandé): tu concatènes tes lettres dans un string puis tu print le string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(len(lst)) :
        mot = ""
        for j in range(lst[i]) : #c'est ce que j'essayai de t'expliquer, tu parcours une autre liste qui est à l'indice i de ta liste initiale
            #Maintenant tu peut donc faire : 
            mot = mot +lst[i][j] # tu peux mettre : mot += lst[i][j] si tu as vu l'expression, ( c'est l'abréviation de mot = mot + variable)
        print(mot)
    2ème solution qui est moins élgante et non recommandé dans ton cas je pense c'est d'utiliser la fonction join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(len(lst)) :
        print("".join(lst[i]) #join te rassemble tout les éléments de ta liste passé en paramètre en les collant avec la chaine que tu mets avant, ici ont veut rien entre les éléments de lst[i]
    J'ai essayé de t'expliquer ( pour ne pas te donner que la réponse ), donc j'espère que tu auras compris
    Merci beaucoup pour ton aide.

    j'ai donc essayé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(len(lst)) :
        mot = ""
        for j in range(lst[i]) : #c'est ce que j'essayai de t'expliquer, tu parcours une autre liste qui est à l'indice i de ta liste initiale
            #Maintenant tu peut donc faire : 
            mot = mot +lst[i][j] # tu peux mettre : mot += lst[i][j] si tu as vu l'expression, ( c'est l'abréviation de mot = mot + variable)
        print(mot)
    et j'obtiens une erreur m'informant qu'un de mes indices est de type STR j'ai donc changé " for j in range(lst[i]) :" en "for j in range (len(lst)):" ici le code fonctionne mais je n'obtiens pas la grille attendu, j'obtiens :
    Nom : projet noé.png
Affichages : 209
Taille : 2,2 Ko

    Je suis un peu perdu et j'aimerais vraiment reussir ce probleme avec cette technique de boucle et d'indice.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Vous pouvez aussi demander à print de ne pas aller à la ligne via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range (len(lst)):
         for j in range(len(lst[i]):
              print(lst[i][j], end= '')
         print()
    - W
    Merci, cette technique marche parfaitement et je ne la connaissais pas, merci de votre aide

  6. #6
    Membre actif
    Homme Profil pro
    apprenti
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Par défaut
    Bonjour, je viens de tester le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    v = [["o","o","o","o","o","o","o","o","o"],["o","o",".",".",".",".",".","o","o"],["o",".",".",".",".",".",".",".","o"],["o",".",".",".",".",".",".",".","o"],["o","o",".",".",".",".",".","o","o"],["o","o","o","o","o","o","o","o","o"]]
     
    for i in range(len(v)) :
        mot=""
        for j in range(len(v[i])) :
            mot = mot + v[i][j]
        print(mot)
    Et j'obtient bien :
    ooooooooo
    oo.....oo
    o.......o
    o.......o
    oo.....oo
    ooooooooo

    .......

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Alors que,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for mylist in v:
        print(''.join(mylist))
    est plus simple et optimisé...

    str.join()

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 720
    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 720
    Par défaut
    Salut,

    str.join a déjà été proposé dans une réponse précédente.

    Après il ne faut pas passer à côté du but de l'exercice: apprendre à écrire une double boucle pour balayer les éléments d'une liste de listes (ou aussi appelé tableau).

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

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour

    str.join a déjà été proposé dans une réponse précédente.
    Wep, désolé j'avais pas lu plus haut, par contre c'est mieux dans le sens où on évite l'utilisation des index et range(len(...)).

    Ça ajoute une petite plus value syntaxique

    Et si on veut utiliser les index, mieux est encore l'utilisation du mot clé enumerate.

    À part ça le but n'est pas d'utiliser une double boucle, ce que tu dis est une interprétation de ce que pourrait attendre le professeur, je trouve cela assez réducteur de l'attente qu'on peut avoir des élèves.

    Même avec la double boucle, on peut éviter les index et range(len(...)) tout en utilisant la concaténation comme indiqué ci-dessus dans vos codes, je suis pas sûr que cette solution ne soit pas à la portée des étudiants, si ?

    C'est comme le paramètre end, ont-ils le droit de l'utiliser ? N'ont-ils pas juste le droit d'utiliser print sans paramètre ?

    Bref, pas de consigne précise, moi je pars de principe que je suis libre de faire ce que je veux

  10. #10
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    On peut même le faire sans boucle...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

Discussions similaires

  1. Aide pour exercice 9.7 de python 3
    Par Shtrakeur dans le forum Général Python
    Réponses: 6
    Dernier message: 03/10/2011, 21h20
  2. Aide pour exercice livre "Apprendre à programmer en Python" par Swinnen
    Par reivilo1982 dans le forum Général Python
    Réponses: 4
    Dernier message: 28/02/2011, 12h35
  3. aide pour exercice
    Par tania dans le forum Algorithmes et structures de données
    Réponses: 26
    Dernier message: 14/09/2007, 19h33
  4. Aide pour exercices d'algo
    Par couls dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/08/2007, 14h05
  5. besoin d'aide pour exercice
    Par aurore973 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/05/2007, 08h14

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