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 :

Boucles - while - while True, while if, while else


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut Boucles - while - while True, while if, while else
    Bonjour a tous.
    j'apprends doucement a utiliser ce que j'ai appris et a me faire comprendre par l'interpreteur.
    La boucle while a ce stade m'interesse car elle est proche de la langue parlee et du comportement de l'homme quand il calcule "a la main".
    Cependant la peinture a la "while" c'est bien difficile meme si ce n'est pas ce qu'il y a de plus" for"!
    J'ai un trou dans "while True".

    Voici un extrait de wikipedia sur les boucles:


    In fact, what you will see a lot of in Python is the following -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while True:
        n = raw_input("Please enter 'hello':")
        if n.strip() == 'hello':
            break
    As you can see, this compacts the whole thing into a piece of code managed entirely by the while loop. Having True as a condition ensures that the code runs until it's broken by n.strip() equalling 'hello'. The only problem with this is that it slows things down a lot - this is due to first testing the True condition for the while, then again testing the n.strip() value compared to the string 'hello'. Another version you may see of this type of loop uses 1 instead of True - this is exactly the same, though in Python 2.*, using while 1 is minutely faster, due to the ability to reassign True to a different value - the interpretor needs to look up the value of the variable, as opposed to loading a constant.

    As a programmer, it is up to you which style to use - but always remember that readability is important, and that speed is also important.


    Je ne comprends pas ce que veut dire "while True", c'est quoi qui doit être vrai?

    Ici on voit l'utilisation de while / if au lieu de while / else

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    Citation Envoyé par sirelion Voir le message
    Je ne comprends pas ce que veut dire "while True", c'est quoi qui doit être vrai?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while <expression>:
       ...
    Dans la boucle while ci-dessus, <expression> est évaluée (à chaque itération) et, si elle est "vraie", la suite des instructions est exécutée.

    un while True: correspond donc à ce qu'on appelle généralement une "boucle infinie" : l'expression est constante et vaut True : la condition pour continuer à boucler est toujours remplie.

    On en sort via un break (voir l'exemple Wikipedia que tu as posté : on sort de la boucle uniquement si l'on saisit 'hello')
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut @plxpy
    Bonsoir et merci beaucoup ainsi qu'a Tyrtamos et Wiztricks
    J'ai trouve un joli tutorial qui m'a aide a bien mieux ordonner dans ma tete les "flows control".
    Le voici. Je l'ai ajouter a mon petit carnet.
    http://www.tutorialspoint.com/python...op_control.htm
    Il manque un peu de consistance quand il explique la difference entre les roles de "else" dans la boucle "for" et dans la boucle "while"/

    En conclusion provisoire:
    Quant on PASS a la peinture a l'WHILE et qu'on CONTINUE on se sent tres FOR mais ca ne casse pas toujours des BREAK parce que quand on LOOP son coup ca peut faire pas mal de degat; par exemple si on est expedit-IF, et qu'on utilise des TRUE ELSE ou que l'enceFALSE precipite.

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Sors de ce corps, Boby Lapointe !

    trêve de plaisanterie (allez, c'est Noël !), poste tes vraies questions. Les "en rouge" et méga-sizes n'aident pas ...
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  5. #5
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut OK plxpy
    Oui, c'est ca la question:
    Dans le tutoriel dont j'ai envoyé le lien, il est dit que dans la boucle "for in range ()", le else intervient quand la boucle a fini de passer la succession des valeurs du "range".
    Et c'est différent pour la boucle while car celle-ci est par définition en continuation quand sa variable de proposition est vraie et donc être fini c'est attribuer la valeur de vérité "False" a sa variable de proposition. Maintenant vérifions dans l'exemple proposé (qui coïncide avec ma première question sur les nombres premiers):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for num in range(10,20):  #to iterate between 10 to 20
       for i in range(2,num): #to iterate on the factors of the number
          if num%i == 0:      #to determine the first factor
             j=num/i #to calculate the second factor
             print '%d equals %d * %d' % (num,i,j)
             break #to move to the next number, the #first FOR
       else:        # else part of the loop
          print num, 'is a prime number'
    on voit que la proposition alternative "else" intervient quand la boucle pour un nombre candidat a la primauté s'est déroulée de 2 a n - 1.
    Mais alors pourquoi ca s'appelle else qui est un ou exclusif?. On ne peut pas dire que ca veut dire "si num est a l'extérieur du range c.-à-d. si la proposition for n'est pas vérifiée. Le mot else n'est surement pas le fruit d'un hasard! A

    Dans le "while" je comprends facilement que ca s'appelle else: par exemple si la proposition tant que a < 10 est vraie, alors imprimons a, sinon (else) écrivons une phrase et arrêtons la boucle.

    Ca c'est une question toute bête mais tant qu'il y a des choses qui m'empêchent de lire ca comme il faut je bloque. (remarque que je me conforme a ta demande de ne pas mélanger des plaisanteries, )

    Remarque: La boucle infinie while true ne serait-ce pas ce qu'on appelle la boucle "untill" en langage Ruby.
    Je m'excuse pour les blagues, a mon epoque on utilisait pas les emoticones (ce n'est pas une blague). Merci d'avance pour les eclaircissements.

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    La ligne 7 ne serait-elle pas inutile ?
    Dans ce cas, on pourrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for num in range(10,20):  #to iterate between 10 to 20
       for i in range(2,num): #to iterate on the factors of the number
          if num%i == 0:      #to determine the first factor
             j=num/i #to calculate the second factor
             print ('%d equals %d * %d' % (num,i,j))
             break #to move to the next number, the #first FOR
       print (num, 'is a prime number')
    Pas d'aide par mp.

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

    Citation Envoyé par sirelion Voir le message
    Dans le tutoriel dont j'ai envoyé le lien, il est dit que dans la boucle "for in range ()", le else intervient quand la boucle a fini de passer la succession des valeurs du "range".
    Et c'est différent pour la boucle while car celle-ci est par définition en continuation quand sa variable de proposition est vraie et donc être fini c'est attribuer la valeur de vérité "False" a sa variable de proposition. Maintenant vérifions dans l'exemple proposé (qui coïncide avec ma première question sur les nombres premiers):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for/while ...:
         ...
             break
         ...
    else:  # no break!
        ....
    Que ce soit avec "for" ou "while", le "else" associé ne sera exécuté que si le block ("for" ou "while") ne s'est pas terminé par "break".
    Il eut été intéressant de remplacer ce "else" là par une instruction "no_break".

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut @wiztricks & @marco056
    L’explication de Wiztricks est éclairante pour for en ce sens que le else est la "double negation" de "break", l'interruption de la boucle.

    Je vais reprendre pour voir si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    l = range(1,100)
    for x in l:
        if x == 100:
            print x
            break
        else: # ICI ON N" A PAS BREAKE PARCE QU"ON N"A PAS TROUVE LE 100!
            print x," is not 100"
    else:
        print "100 not found in range"
    pour le while: (et tant pis (!!!!!!!!!!!!!!!!!!!!!!!!!!) si je ne comprends pas pourquoi on l'appelle else) puisqu'il n'y a pas de break avant dans ma tête çà doit s'appeler no "break"
    a moins que le while ne soit une sorte d'arret par mise en echec(?!?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    x = 5
    y = x
    while y > 0:
        print y
        y = y - 1
    else:  # ICI ON EST ARRIVE A LA FIN DU DÉROULEMENT DONC ON N'A PAS BREAKE 
        print x
    les codes sont copies ici (http://en.wikibooks.org/wiki/Python_...g/Control_Flow)

    la remarque de marco056 touche au fait que l'on puisse utiliser le degré d'indentation pour revenir au bloc plus a gauche (bloc incluant, plus global). Je m'y suis essaye plusieurs fois et la console me renvoie un truc sur l'indentation. c'est sur ca que j'echoue le plus. Je vais reprendre.

  9. #9
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut Allez, c'est pas en ayant peur de se ridiculiser qu'on apprend @marco056
    voici.
    Tu as l'air de savoir manipuler les indentations en repartant a gauche apres les sous-boucles. C'est la que je n'ai rien compris:

    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
    25
    26
    27
    # Un nombre premier est divisible uniquement par 1 et par
    # lui-meme.
    somme = 2
    total = 0
     
    while total < 1000:
        total = 1
        for x in range (3, 1000000):
    		for d in range (2, x):
    			if x % d == 0:
    				break
    			else:
    				somme = somme + x
    """ ici la console va me dire"  File "somme_de_nombres_premiers.py", line 15
        total += 1
                 ^
    IndentationError: unindent does not match any outer indentation level
    "   """			    
    	total += 1  #
     
    	print(x, " est un nombre premier!", somme, " est la somme actuellement.", total, " est le total de nombres premiers trouves." )
     
     
     
     
        else:
    		print("La somme totale est ", somme)
    Pourtant je pensais qu'ayant fini avec les "for" ca incrementerait la variable "total".
    Quel est le principe que j'ai compris de travers?

  10. #10
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut Essayer de comprendre les boucles imbriquees NESTED WHILE LOOPS. Demande de clarte
    Je me sens un peu mal a l'aise de reflechir a ca en ce triste jour...

    bonjours mes chers amis.
    Je suis en train de lire un tutoriel qui fait remarquer un phenomene etonnant

    Je copie le passage sur lequel je m'interroge:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = -20
    y = 20
    while x <= y:
        print ("X is now: ", x)
        x = x + 1
        while x <= 0:
            print ("X is negative")
            x = x + 1
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    RESULTAT:
    >>> 
    X is now:  -20
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is negative
    X is now:  1
    X is now:  2
    X is now:  3
    X is now:  4
    X is now:  5
    X is now:  6
    X is now:  7
    X is now:  8
    X is now:  9
    X is now:  10
    X is now:  11
    X is now:  12
    X is now:  13
    X is now:  14
    X is now:  15
    X is now:  16
    X is now:  17
    X is now:  18
    X is now:  19
    X is now:  20
    >>>
    Thus, Python will print the count only once X is more than 0. Fin de citation.
    La vraie vérité, je ne comprends pas pourquoi. J'étais sur que l'on devait obtenir a chaque fois les deux phrases x is now et x is négative.
    Comment se fait-il que quand on rentre dans l'indentation de la sous-boucle on élide l'ordre de la boucle première.
    Je pressens que ca a a voir avec les variables globales et locales mais ce n'est pas clair et je ne veux pas me contenter du fait que c'est comme ca et pus c'est tout car un langage de programmation est un langage logique et donc il y a surement un truc évident qui me passe sous le nez.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par sirelion Voir le message
    La vraie vérité, je ne comprends pas pourquoi.
    J'étais sur que l'on devait obtenir a chaque fois les deux phrases x is now et x is négative.
    Comment se fait-il que quand on rentre dans l'indentation de la sous-boucle on élide l'ordre de la boucle première.
    C'est du code, pas de la littérature. Les instructions sont exécutées lune après l'autre.
    Si Python doit exécuter un bloc "tant que x <= y", il le fait sans se poser de question que ce bloc soit à l'intérieur d'un autre bloc ou pas.
    note: et seul le programmeur assure que la condition qui permet d'en sortir pourra être vraie...

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

  12. #12
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Effectuer les opérations à la main permet facilement de comprendre ce genre de problème. C'est une erreur classique de débutant mais qui ne devrait plus se faire assez rapidement.
    Pas d'aide par mp.

  13. #13
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut @wiztricks
    Je suis certain que ce que vous dites est très clair.
    Les petites remarques sur le code et la littérature gardez les pour de meilleures occasions, par exemple si vous discutez avec des amis proches qui ne risquent pas de se vexer parce qu'ils ont l'habitude de votre manière de vous exprimer.
    Ce que vous dites si x< y justement m’étonne, alors ... pourquoi çà disparaît le x is x?
    Je n'ai pas perçu la réponse.

  14. #14
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par sirelion Voir le message
    Je suis certain que ce que vous dites est très clair.
    Les petites remarques sur le code et la littérature gardez les pour de meilleures occasions, par exemple si vous discutez avec des amis proches qui ne risquent pas de se vexer parce qu'ils ont l'habitude de votre manière de vous exprimer.
    Ce que vous dites si x< y justement m’étonne, alors ... pourquoi çà disparaît le x is x?
    Je n'ai pas perçu la réponse.
    Faites-le en plus simple à la mano :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = -5
    y = 2
    while x <= y:
        print ("x vaut maintenant : ", x)
        x = x + 1
        while x <= 0:
            print ("x est négatif")
            x = x + 1
    Pas d'aide par mp.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par sirelion Voir le message
    Je suis certain que ce que vous dites est très clair.
    Les petites remarques sur le code et la littérature gardez les pour de meilleures occasions, par exemple si vous discutez avec des amis proches qui ne risquent pas de se vexer parce qu'ils ont l'habitude de votre manière de vous exprimer.
    Ce que vous dites si x< y justement m’étonne, alors ... pourquoi çà disparaît le x is x?
    Je n'ai pas perçu la réponse.
    Tant que vous n'essayez pas de vous mettre à la place de l'interpréteur Python et exécuter les instructions à sa place, vous ne considérez pas cela comme un code que doit exécuter une machine mais comme un simple texte écrit. Techniquement, un "texte écrit" est ce qu'on appelle de la littérature, c'est comme çà.
    Et lorsque la machine exécute ce bloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        while x <= 0:
            print ("x est négatif")
            x = x + 1
    elle n'en sortira pas "tant que x <= 0".
    C'est ainsi qu'est définie la boucle "while" par le langage Python (et la plupart des autres langages de programmation).

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

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    Quand un code est mal compris, il est important de l'effectuer à la main pour le comprendre soi-même comme l'ont dits les autres membres.
    Ici tu observes ton code :
    Quand tu pénètres dans ta boucle
    Tu vas afficher une première fois 'X is now - 20'
    Puis ensuite comme x = -19 <=0, tu rentres dans la boucle
    Et tu pourras en ressortir uniquement lorsque x sera incrémenté jusqu'à la valeur 1. Entre temps ton interpréteur va t'afficher 20 fois 'X is negative'.
    Ensuite tu ne rentrera plus dans cette boucle puisque x sera positif strictement.
    Tu vas donc juste rester dans ta première boucle à afficher 'x is now ....' entre 1 et 20 car x s'incrémentera de 1 à chaque passage.

    En espérant t'avoir éclairé!

  17. #17
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut @(wiztricks, marco 056, lpaxtor)
    Donc:
    1- énoncés et logique des prédicats != instruction pour faire œuvrer la machine.
    2- La machine travaille linéairement c'est a dire point après point et pas deux points a la fois
    3- Donc, dixit wiztricks, quand la machine œuvre a la deuxième boucle elle n'a que faire de la grande boucle (le grand bloc)
    4- Me fait remarquer paxtor, la deuxième boucle ne commence qu'a partir de - 19, car avec le - 20 elle a déjà fini avant de faire entrer le - 20 dans la deuxième boucle.

    J'ai trouve un petit cas ou la constatation 3- ne s'applique pas:


    Wiztricks a dit: Si Python doit exécuter un bloc "tant que x <= y", il le fait sans se poser de question que ce bloc soit à l'intérieur d'un autre bloc ou pas.
    Oui mais regardez cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = 2
    y = 3
    while x < 20:
    	print (x)
    	x += 1
    	while x % 9 == 0:
    		print (str(x), "a la coque")
    		x += 2
    et le resultat:
    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
    2
    3
    4
    5
    6
    7
    8
    ('9', 'a la coque')
    11
    12
    13
    14
    15
    16
    17
    ('18', 'a la coque')
     
     
    ------------------
    (program exited with code: 0)
    Press return to continue
    on y voit clairement que dans la sous boucle l'ordinateur continue a surveiller la condition de la premiere boucle donc python sait pertinament qu'il est a l'interieur d'un autre bloc. J'ai besoin de comprendre encore un peu.


    pour ce qui est du quatrieme point pourquoi la deuxieme boucle (dans l'exemple precedent n'ecrit pas a propos de -20 qu'il est negatif. la deuxieme instruction est dans le scope de la boucle)

    http://www.developpez.net/forums/ima...ilies/ptdr.gif
    Merci a tous. J'essaie de faire a la main

  18. #18
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Je ne comprends pas ce qui te gêne.
    Encore une fois, tu prends des nombres plus petits, tu fais les boucles à la main.
    Ensuite, tu pourras indiquer clairement quelle étape te chagrine.
    Si tu ne souhaites pas le faire, ciao !

    P.S. Désolé pour ce mouvement d'humeur, je ne suis pas en joie, aujourd'hui.
    Pas d'aide par mp.

  19. #19
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par sirelion Voir le message

    pour ce qui est du quatrieme point pourquoi la deuxieme boucle (dans l'exemple precedent n'ecrit pas a propos de -20 qu'il est negatif. la deuxieme instruction est dans le scope de la boucle)
    Parce que x est incrémenté avant l'affichage "négatif"
    Pas d'aide par mp.

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    C'est très flou j'ai l'impression dans ta tête.
    L'exemple est simple mais peut être encore trop compliqué pour toi, il faut déjà maîtriser correctement les boucles et les conditions simples avant de voir les boucles imbriquées. Wiztricks a entièrement raison. Python ne surveille rien du tout! Il suit juste le fil d’exécution qui tu lui a dit de suivre. Ton exemple ne montre rien, d'ailleurs tu peux très bien remplacer ton 2è while par un if : si 9 divise x, il ne divisera pas x+2.
    Après il y a l'erreur classique que tous les débutant font, c'est de penser que l'on sort de la boucle "au moment ou" la condition devient fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 0
    while x<10:
        x = x + 30
        x = x - 29
    Tu penses peut être que à la 3è ligne comme x = 30 et donc x>= 10 on sort de la boucle mais non ! On continue jusqu'en bas de la boucle PUIS on remonte en haut de la boucle et on vérifie la condition x<10.
    En somme ce code équivaut à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=0
    while x<10:
        x += 1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2015, 22h14
  2. insertion de données issues d'un array sans boucles de type for each ou while.
    Par piotrowski-s dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/09/2012, 11h27
  3. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36
  4. Réponses: 6
    Dernier message: 24/01/2006, 13h31

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