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 :

Pyramide exercice débutant


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut Pyramide exercice débutant
    Bonjour, dans le cadre de mon cours on nous a posé un problème à savoir celui de former une pyramide de la forme de celle du screenshot 1, je parviens avec mon code (screenshot2) à générer une pyramide avec effet miroir mais je ne parviens pas à adapter les nombres correctement est-ce que quelqu'un pourrait me donner UNE PISTE pour la résolution de ce problème par rapport à mon code svp?
    Nom : Capt1.png
Affichages : 468
Taille : 80,4 KoNom : Capt2.png
Affichages : 591
Taille : 31,3 Ko

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

    Citation Envoyé par WizzyK Voir le message
    est-ce que quelqu'un pourrait me donner UNE PISTE pour la résolution de ce problème par rapport à mon code svp?
    Vous avez commencé à coder sans avoir une idée précise de comment fabriquer ce qu'on vous demande!
    Regardez la pyramide, à la ligne n, il y a z = 2*(n-1)+1 chiffres.... qui sert aussi a fixer la valeur du "milieu".
    Et il y a une petite difficulté pour n >= 6 qui pourra faire l'objet d'une autre question.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Je conceptualise assez bien ce qu'il faut faire sur papier mais je n'arrive pas à utiliser les boucles correctement en effet, pour dire vrai je suis complètement perdu même le résultat trouvé dans le screenshot a été trouvé par tâtonnements ...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 723
    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 723
    Par défaut
    Citation Envoyé par WizzyK Voir le message
    mais je n'arrive pas à utiliser les boucles correctement en effet, pour dire vrai je suis complètement perdu même le résultat trouvé dans le screenshot a été trouvé par tâtonnements ...
    C'est un sujet de boucles imbriquées.
    Commencez par la boucle interne (ou la boucle externe), vous avez écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(1, n+1, 2):
          ...
    Que représente ce i par rapport au problème posé?

    Par contre si j'écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(n):
        j = 2*i+1
        print (i+1, j)
    ça affiche n lignes numérotées de 1 à 10 avec le nombre de chiffres à écrire.

    La boucle interne devra se baser sur i, j (et n) pour faire le boulot qu'on attend d'elle.

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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par WizzyK Voir le message
    Je conceptualise assez bien ce qu'il faut faire sur papier mais je n'arrive pas à utiliser les boucles correctement
    Si je lis bien ton code, tu commences par boucler à l'horizontale (donc tu commences par la boucle qui affiche la ligne) et à chaque valeur tu boucles à la verticale.
    Bref tu affiches le résultat colonne par colonne. Ca peut probablement se coder (ça reste un problème fini) mais ça va être galère. Moi je serais parti à afficher ligne par ligne.
    Et pour le reste, si tu veux qu'on t'aide, commence par poster un code (un truc qu'on peut copier/coller) et non une image peu utilisable (c'est d'ailleurs mentionné dans les règles).
    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]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Si je lis bien ton code, tu commences par boucler à l'horizontale (donc tu commences par la boucle qui affiche la ligne) et à chaque valeur tu boucles à la verticale.
    Bref tu affiches le résultat colonne par colonne. Ca peut probablement se coder (ça reste un problème fini) mais ça va être galère. Moi je serais parti à afficher ligne par ligne.
    Et pour le reste, si tu veux qu'on t'aide, commence par poster un code (un truc qu'on peut copier/coller) et non une image peu utilisable (c'est d'ailleurs mentionné dans les règles).
    Toutes mes excuses,

    en effet c'est ce que j'avais en tête, pour répondre à Wiz, le i par rapport au problème représente la ligne ou du moins c'est ce que j'ai essayé de traduire lorsque i vaut 1 on commence par les espaces puis par les chiffres à afficher, lorsque i vaut 2 on suit la même logique sur la 2ème ligne mais avec un pas de 2 puisque il y'a un nombre impair de chiffres et que je souhaite dans ma boucle imbriqué invoquer i pour représenter à chaque fois un nombre impair de chiffres correspondant à la ième ligne.

    J'ai trouvé une solution et la décortique ce qui n'est pas du tout la meilleure forme d'apprentissage mais je calais dessus depuis un bon moment, j'ai beaucoup de mal à traduire le concept suivant :
    i ème ligne ===> 2(i-1) + 1 colonnes ===> commence par le j ème chiffre vous aurez compris dans la dernière implication que je ne sais pas trop comment placer mon j pour que la boucle suive les deux premières.

    Vient ensuite le problème du "miroir" autour de la valeure centrale de la ième ligne, j'ai tenté un if statement mais les corrections sur lesquelles je suis tombé n'embrayent pas du tout de ce côté là j'ai réalisé mon erreur en comprenant que rien ne m'oblige à considérer les lignes comme "entières" je peux en effet remplir une ligne en 2 étape distinctes.

    Lors de ma mise en situation du problème devrais-je me focaliser sur la colonne centrale ? Dans le sens où j'ai l'impression que c'est l'élément qui conditionne tout le problème, incrément positif à gauche négatif à droite, ième ligne contient 2(i-1) + 1 chiffres ...

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WizzyK Voir le message
    Lors de ma mise en situation du problème devrais-je me focaliser sur la colonne centrale ? Dans le sens où j'ai l'impression que c'est l'élément qui conditionne tout le problème, incrément positif à gauche négatif à droite, ième ligne contient 2(i-1) + 1 chiffres ...
    Il faut te focaliser sur le numéro "n" de la ligne en cours (et aussi prendre en compte le total de lignes demandées). Si on lit chaque ligne de la gauche vers la droite (sens qui me semble être celui de la majorité des écritures humaines et qui, surtout, est celui suivi par print()), chaque ligne "n" se décompose en 5 parties
    • les espaces (il y en a "t-n")
    • les chiffres qui partent de "n" (inclus) et qui vont jusqu'à 2n-1 (exclu)
    • le chiffre central égal à 2n-1
    • les chiffres qui partent de 2n-1 (exclu) et qui redescendent jusqu'à "n" inclus. Donc, pour s'adapter à Python qui prend la borne de départ incluse et la borne d'arrivée exclue, qui vont alors de 2n-2 (inclus) et qui redescendent jusqu'à "n-1" (exclu)
    • les "t-n" espaces
    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]

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 960
    Par défaut
    Pour moi, il n'est pas utile chercher a gérer les espaces.
    Il faut se concentrer sur le chiffre du centre (X) et sur le nombre de chiffres par ligne (Y).
    En premier lieu, placer X dans une chaine.
    Ensuite le chiffre à gauche et à droite sont identique et valent X-1 (sauf pour 9, il faut mettre 0).
    On recommence l'opération en boucle de 0 à la moitié (valeur entière) de Y (justement car le chiffre avant et après sont identiques).
    Une fois la suite de chiffres établie pour une ligne, les espaces peuvent être gérés avec la méthode center(Nb) ou Nb représente la longueur max de la chaine (obtenu facilement à partir de la hauteur de pyramide demandée au départ).
    On fait cette opération pour chaque ligne de la pyramide.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 723
    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 723
    Par défaut
    Citation Envoyé par WizzyK Voir le message
    en effet c'est ce que j'avais en tête, pour répondre à Wiz, le i par rapport au problème représente la ligne ou du moins c'est ce que j'ai essayé de traduire lorsque i vaut 1 on commence par les espaces puis par les chiffres à afficher, lorsque i vaut 2 on suit la même logique sur la 2ème ligne
    Est-ce que vous vous rendez compte qu'en ayant écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(1, n+1, 2):
          ...
    la valeur de i ne sera jamais 2?

    Il faut vous appliquer à écrire un code qui traduise ce que vous voulez faire et réciproquement: si i n'est jamais égal à 2 dans le code, réaliser que ça ne fait pas ce que vous pensez/voulez. La difficulté ici est d'arriver à relire son code pour constater qu'il traduit (ou pas) ce qu'on voulait au départ.... puis de l'exécuter pour constater que c'est un peu différent de ce qu'on pensait puis passer du temps pour comprendre pourquoi.
    Au début, c'est un travail fastidieux mais l'expérience vient vite...

    Citation Envoyé par WizzyK Voir le message
    i ème ligne ===> 2(i-1) + 1 colonnes ===> commence par le j ème chiffre vous aurez compris dans la dernière implication que je ne sais pas trop comment placer mon j pour que la boucle suive les deux premières.
    Je vois surtout que la ligne commence par un chiffre qui s'incrémente de ligne en ligne... et si le numéro de ligne est représenté par la variable i, quel est le rapport avec j?
    Vous avez essayé de jouer avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(n):
        j = 2*i+1
        print (i+1, j)
    Si on change un peu la dernière ligne, on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> for i in range(5):
    ...     j = 2*i+1
    ...     print(' '*(n), j)
    ...
         1
         3
         5
         7
         9
    >>>
    => le j s'affiche en colonne n+1
    ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for i in range(5):
    ...     j = 2*i+1
    ...     print(' '*(n-i), i+1)
    ...
          1
         2
        3
       4
      5
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> for i in range(5):
    ...     j = 2*i+1
    ...     print(' '*(n-i), end='')
    ...     for k in range(i+1, j+1): print(k, end='')
    ...     print()
    ...
         1
        23
       345
      4567
     56789
    >>>
    a vous d'être curieux...

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

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par popo Voir le message
    Pour moi, il n'est pas utile chercher a gérer les espaces.
    Pour utiliser center il est nécessaire de créer la ligne de chiffres d'un seul tenant pour pouvoir la centrer à l'affichage. Moi j'avais plus pensé aux print() à suivre pour que ça raccorde avec les print() du PO. Mais ta solution est possible.
    Attention ce n'est pas "9 qui devient 0" mais "on n'affiche que le dernier digit du chiffre".
    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]

  11. #11
    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
    Citation Envoyé par Sve@r
    Pour utiliser center il est nécessaire de créer la ligne de chiffres d'un seul tenant pour pouvoir la centrer à l'affichage.
    Pas créer, construire à partir d'une partie gauche et une partie droite, c'est de la concaténation...

    Partir de la solution du PO c'est bien, connaître les astuces et les fonctions python qui font ça aussi bien, c'est de la culture

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Est-ce que vous vous rendez compte qu'en ayant écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(1, n+1, 2):
          ...
    la valeur de i ne sera jamais 2?

    Il faut vous appliquer à écrire un code qui traduise ce que vous voulez faire et réciproquement: si i n'est jamais égal à 2 dans le code, réaliser que ça ne fait pas ce que vous pensez/voulez. La difficulté ici est d'arriver à relire son code pour constater qu'il traduit (ou pas) ce qu'on voulait au départ.... puis de l'exécuter pour constater que c'est un peu différent de ce qu'on pensait puis passer du temps pour comprendre pourquoi.
    Au début, c'est un travail fastidieux mais l'expérience vient vite...
    Merci !!! Je vais me repencher sur ce process, pour répondre à popo, nous n'avons pas encore vu dans le cadre de mon cours la fonction center() donc je pense que l'idée est de parvenir à écrire le code sans utiliser cette fonction, et donc gérer les espaces ... mais merci une fois avoir maîtrisé le problème je reviendrai sur les variantes possibles.

    Merci à vous tous pour vos contributions !

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WizzyK Voir le message
    nous n'avons pas encore vu dans le cadre de mon cours la fonction center()
    Il y a beaucoup de fonctions et tu ne pourras pas toutes les voir. center() n'est pas vraiment une fonction au même sens que range() ou len(), c'est une méthode associée aux chaines. "toto".center(20) va juste te générer la chaine
    "        toto        "
    Et programmer en Python c'est aussi chercher par soi-même. Donc peut-être que finalement tu as le droit d'utiliser des outils non vus en cours.

    Sinon je confirme qu'on peut aussi faire cet exercice uniquement avec du range() et du print(). Et dans ce cas, il faut alors bien évidemment gérer les espaces comme je l'ai expliqué dans mon post 7.
    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. [VB6] Exercice de Combinatoire
    Par fichtre! dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 19/01/2005, 14h27
  2. Un cours de C/C++ avec exercices corrigés
    Par merrheim dans le forum C++
    Réponses: 65
    Dernier message: 18/01/2005, 22h30
  3. Demande de corrections d'exercices Turbo Pascal
    Par Helpine dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 16/01/2005, 10h38
  4. Pages d'exercices à faire pour l'autoformation ?
    Par [thebadskull] dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 15/06/2004, 20h26
  5. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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