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 :

Probleme boucles imbriquées


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut Probleme boucles imbriquées
    Bonsoir,

    Je débute alors forcement...
    L'objet de l'exercice est de faire ça :
    *
    **
    ***
    ****
    *****

    En cherchant je suis arrivé au résultat ci dessous, qui est faux (en gras).
    Existe t il une méthodologie pour résoudre ce type de problème car je me prends les pieds au niveau de l’incrémentation?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a,b=1,0
    while a<=5:
        print("*")
        while b<=(2*a-1):
            print("*",end="")
            b=b+1
        a=a+1

  2. #2
    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,

    Quelle est le signification de ceci:
    ?

    Python c'est beaucoup plus simple que ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> for i in range(5):
    ...     print('*' * i)
    ... 
     
    *
    **
    ***
    ****

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Quelle est le signification de ceci:
    D’après ce que j'ai compris, la boucle imbriqué doit tourner 1 fois de plus que la boucle imbriquante à chaque tour de cette boucle (je fume^^)
    le "2*a-1" devrait donc être remplacé par "a+1" ? Mais ça ne donne pas le résultat escompté. L'objet est de n'utiliser que des boucles while (chapitre 4 exercice 9 de python3)

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    y a plusieurs soucis dans ton algo, mais on va pas te les lister tout de suite, ça serait trop facile
    ce que je te conseille de faire, c'est de dérouler ton algo "à la main" avec un papier et un crayon:
    1. tu te fais un tableau avec 2 colonnes ou tu listeras les valeurs que prennent successivement tes variables a et b (éventuellement une 3e colonne pour les valeurs de 2*a-1)
    2. tu te reserve une zone out dessinera ce qui est censé s'afficher à l'écran
    3. tu suis ton programme en exécutant de dans ta tête chaque instruction et en notant le résultat à chaque fois sur ta feuille.


    tu vas voir que tu vas très rapidement repérer les soucis qu'il y a dans ton algo. et comme le programme est tout petit, ça sera ni très difficile, ni très long

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut
    Bon, j'ai modifié quelques trucs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    a,b,t=1,0,0
    while a<=5:
        print("*")
        while b<t+a:
            print("*",end="")
            b=b+1
        a=a+1
        t=b
    J'ai crée une variable temporaire t qui récupère la valeur de b et la stocke hors de la boucle imbriqué. Parce que b<b+a ne pouvait pas fonctionner ligne 4. Je pense qu'il y a plus simple.

  6. #6
    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
    Au risque de me répéter, Python c'est beaucoup plus simple que ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >>> i = 1
    >>> while i < 6:
    ...     print('*' * i)
    ...     i += 1
    ... 
    *
    **
    ***
    ****
    *****
    >>>

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    quand on fait des excercices et qu'on apprend de manière généréal, ça ne me parait pas déconnant de pas forcément chercher la manière la plus courte de faire...
    c'est très bien qu'on puisse solutionner le problème en 2 lignes, mais je suis pas certain que ça soit le but de l'exercice.

    Je pense qu'il y a plus simple.
    effectivement il y a plus simple, même en écrivant les caractères un par un avec 2 boucles et sans forcément chercher à faire le truc en 2 lignes.
    déjà on peut s'interesser à tes 2 print:
    • la première affiche un caractère et passe à la ligne suivante
    • la deuxième affiche 0 ou plus caractère et ne passe pas à la ligne suivante

    là y a dejà un problème car ça veut dire que dans un un tour de ta première boucle, tu écris la fin d'une ligne et le début d'une autre. y a probablement moyen de s'en sortir comme ça mais c'est surement pas le plus intuitif, ni le plus simple.
    essaye d'écrire chaque ligne du début à la fin dans le même tour de boucle, ça sera bien plus simple et propre.
    pour être plus "pratique", dans le même tour de boucle il faut:
    1. d'abord afficher 0 ou plus caractères sans retour à la ligne
    2. ensuite afficher le dernier caractère avec le retour à la ligne


    un indice en plus: y a moyen de faire sans la variable t

  8. #8
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut
    je sèche complétement...2 boucles while?

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    bah tu as bien 2 boucles while dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    a,b,t=1,0,0
    while a<=5:
        print("*")
        while b<t+a:
            print("*",end="")
            b=b+1
        a=a+1
        t=b

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Points : 113
    Points
    113
    Par défaut
    Bon j'ai trouvé une solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a, b = 0, 0           
    while(a <= 7):    
        while(b <= a):   
            print("*", end="")
            b = b+1               
        print("")                     
        a =a+1
        b=0
    C'est l'astuce de remettre la variable b à 0 qui m'a échappée. Quelle galère :-/

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par loncle Voir le message
    C'est l'astuce de remettre la variable b à 0 qui m'a échappée. Quelle galère :-/
    C'est pour cela qu'en Python on préférera écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> for a in range(8):
    ...     for b in range(a+1):
    ...        print('*', end='')
    ...     print()
    ...
    La forme est "plus concise" et évite les oublis.

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

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

Discussions similaires

  1. Probleme boucle imbriqué
    Par bigbug412 dans le forum Struts 1
    Réponses: 0
    Dernier message: 10/07/2009, 15h00
  2. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  3. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  4. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19
  5. [LG]Problême Boucle
    Par pierrOPSG dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2004, 16h48

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