boucle while
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 54

boucle while



  1. #1
    ilelogique

    boucle while


    ------

    Bonjour,
    quand je tape ceci en python ça m'énumère à l'infini tous les entiers, pourtant je pensais que while attendait une valeur booléenne (vrai ou faux), quelqu'un sait-il ? Car "4" n'est ni vrai ni faux...
    je pensais que ça ferait erreur,
    merci

    i = 0
    while 4 :
    print(i)
    i+=1

    -----
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  2. #2
    umfred

    Re : boucle while

    si tu fais un
    Code:
    if 4:
        print("vrai")
    else:
        print("faux")
    ça donne quoi ?
    Dans le if et le while, l'évaluation a True se fait selon le critère suivant:
    help('TRUTHVALUE')
    Truth Value Testing
    *******************

    Any object can be tested for truth value, for use in an "if" or
    "while" condition or as operand of the Boolean operations below.

    By default, an object is considered true unless its class defines
    either a "__bool__()" method that returns "False" or a "__len__()"
    method that returns zero, when called with the object. [1] Here are
    most of the built-in objects considered false:

    * constants defined to be false: "None" and "False".

    * zero of any numeric type: "0", "0.0", "0j", "Decimal(0)",
    "Fraction(0, 1)"

    * empty sequences and collections: "''", "()", "[]", "{}", "set()",
    "range(0)"

    Operations and built-in functions that have a Boolean result always
    return "0" or "False" for false and "1" or "True" for true, unless
    otherwise stated. (Important exception: the Boolean operations "or"
    and "and" always return one of their operands.)

    Related help topics: if, while, and, or, not, BASICMETHODS
    donc 4 est considéré comme True donc la boucle est infinie (sinon en mettant explicitement while 4==True; la condition sera False, et donc le while ne sera jamais exécuté)

  3. #3
    pm42

    Re : boucle while

    En python tout est vrai sauf False, None, 0, la chaîne et les listes vides en gros.
    C’est en général expliqué dans les cours et bouquins sur le langage.

    Cela permet d’écrire du code plus concis en augmentant le risque d’erreur ce qui est une bonne définition de ce langage.

  4. #4
    umfred

    Re : boucle while

    cependant si on fait le test explicite 4==True ou 4==False, ça renvoie False dans les 2 cas. (en python)

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : boucle while

    Citation Envoyé par umfred Voir le message
    cependant si on fait le test explicite 4==True ou 4==False, ça renvoie False dans les 2 cas. (en python)
    Oui c’est normal. Là tu compares 2 valeurs non égales explicitement ce qui donne un booléen qui est false.

    Quand tu fais if x, x est converti en booléen avec les règles données ci-dessus.
    Pour certains types de données, on ne peut pas faire cette conversion et on a un message : les dataframes pandas par exemple.

  7. #6
    ilelogique

    Re : boucle while

    merci pour toutes vos réponses très intéressantes, au demeurant j'ai du mal avec l'anglais, pouvez-vous, à défaut d'une version en français, m'en résumer les grandes lignes svp ?
    Car, en fait, ma question porte sur la boucle while en général, indépendamment du langage choisi. je veux dire que normalement un "while" devrait attendre un condition soit vraie soit fausse et le plus souvent dépendant au moins d'une variable. Aussi je m'étonne du choix (est-il arbitraire ?) consistant à attribuer true à tout ce qui n'est pas une affirmation logique, comme mon 4, donc si je mets while trompette c'est pareil, ça renvoie true ?? Pourquoi ce choix, y a-t-il des langages qui renvoient false et d'autres encore qui renvoient "erreur" (ce que me semblerait le plus sencé) ??
    Merci.
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  8. #7
    pm42

    Re : boucle while

    Toutes mes réponses sont en français. Les traducteurs automatiques sont en accès libre pour le texte donné par umfred et on trouve l’info en quelques clics.
    Et la réponse à ta question est aussi dans ce que j’ai écrit.

    Donc lire les réponses et faire des efforts te permettraient de progresser plus vite.

  9. #8
    ilelogique

    Re : boucle while

    Bonjour merci pour vos réponses (je vouvoie les gens ici),
    je répète (car je ne vois pas la réponse dans vos messages) :
    1) ce choix de rendre "4" vrai est-il arbitraire ? Et quelle en est la raison ? je veux dire : pourquoi choisit-on, en gros, que tout est vrai par défaut (à part ce qui est faux cité dans la liste en Anglais ?
    2) Est-ce le cas dans tous les langages ?
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  10. #9
    jiherve

    Re : boucle while

    bonsoir,
    je pense sans en être certain que cela remonte aux origines de l'informatique et que la raison serait à chercher du coté hardware car tous les processeurs offrent un test à zéro ,que l'on raisonne souvent en logique positive et qu'une bonne habitude c'est d'initialiser les variables à zéro, et que cela permet d'utiliser facilement un décompteur qui est toujours plus efficace qu'un compteur + comparaison.
    JR
    l'électronique c'est pas du vaudou!

  11. #10
    ilelogique

    Re : boucle while

    ok merci, mais quel est alors l'intérêt d'avoir "4" qui soit vrai ?, pourquoi while 4 ne renvoie pas plutôt une erreur ? ça veut dire qu'il y a des situations avec des trucs du style "if 7" ou "while 4" qui servent ?
    En fait, à part les trucs faux, on décide que tout est vrai ? Même un sujet sans verbe (c'est à dire qui ne soit pas une proposition logique du type x<5)
    Tous les langages font-ils ça ???
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  12. #11
    pm42

    Re : boucle while

    Citation Envoyé par jiherve Voir le message
    je pense sans en être certain que cela remonte aux origines de l'informatique et que la raison serait à chercher du coté hardware car tous les processeurs offrent un test à zéro
    En effet. C'est évident avec le C (qui pourtant n'est pas du aux origines de l'informatique) mais qui considérait que 0 était faux et 1 vrai ce qui simplifiait le travail du compilateur.
    C'est discutable ceci dit et cela a engendré les célèbres bugs où on mettait = à la place de ==
    La plupart des langages "sérieux" sont fortement et statiquement typés et imposent donc d'écrire les tests explicitement.

    En Python qui est fortement mais dynamiquement typé, c'est vraiment une conversion implicite de certains types vers le booléen qui est utilisé. C'est une variante de ce qui fait en Lisp (puisqu'on parlait de revenir aux origines) où tout ce qui n'est pas NIL est vrai. Et NIL n'est pas 0 en Lisp.

  13. #12
    ilelogique

    Re : boucle while

    incroyable, quand je fais ça ça écrit seulement "trompette" (les tirets sont le décalage de la boucle car le forum colle à gauche sinon (en gros la dernière ligne n'est pas dans le while= :
    i = 0
    while 0 :
    ---- print(i)
    ---- i+=1
    print("trompette")

    donc en effet 0 est false et tous les autres entiers sont true.
    connaissez-vous des langages où "while 4" envoie une erreur ?
    Dernière modification par ilelogique ; 10/05/2022 à 19h47.
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  14. #13
    umfred

    Re : boucle while

    on trouve rarement autre chose que des while 1 si on veut une boucle toujours vrai, on s'embête rarement avec une autre valeur, qui peuvent se faire poser des questions sur pourquoi j'ai mis 4 à cet endroit

    pour l'origine, et compléter ce qui a été dit, ce sont les instructions assembleurs bne (branch if not equal) ou beq (branch if equal) qui teste un bit de status Z (pour Zero) qui indique si l'opération précédente donne un résultat nul ou pas

  15. #14
    JPL
    Responsable des forums

    Re : boucle while

    Citation Envoyé par ilelogique Voir le message
    incroyable, quand je fais ça ça écrit seulement "trompette" (les tirets sont le décalage de la boucle car le forum colle à gauche sinon
    C'est pour éviter cela que la balise Code existe. Par ailleurs, ce n'est pas le forum qui est responsable, c'est la norme du langage HTML qui ne reconnaît pas les espaces successifs.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  16. #15
    ilelogique

    Re : boucle while

    oups pardon d'avoir accusé à tort le forum !
    En fait ce que je comprend c'est que c'est un choix arbitraire de celui qui a créé le langage (ici python),
    pour le coup l'utilité que j'y vois serait par exemple "while f(x)" ça permet de sauter la boucle si f(x)=0 et d'y aller si non par exemple.
    En revanche il doit y avoir d'autres langages où "while 4" renvoie une syntax error, puisqu'il attend une valeur booléenne, en C par exemple ?
    merci
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  17. #16
    jiherve

    Re : boucle while

    bonsoir,
    ah le LISP, je n'ai jamais pratiqué, mais j'ai retenu :https://wiki.c2.com/?LostInaSeaofParentheses
    J'ai ferraillé (5S) début 2000 et à regrets une machine Symbolics , le top du top des années 90, car aucun IUT ni FAC n'en voulait!
    JR
    Dernière modification par jiherve ; 10/05/2022 à 20h45.
    l'électronique c'est pas du vaudou!

  18. #17
    pm42

    Re : boucle while

    Citation Envoyé par jiherve Voir le message
    ah le LISP, je n'ai jamais pratiqué, mais j'ai retenu :https://wiki.c2.com/?LostInaSeaofParentheses
    Ou "lots of irritating silly parentheses".
    J'ai très peu pratiqué aussi et je le regrette un peu.
    J'ai lu des articles qui expliquent qui quiconque écrit un gros système finit par réimplementer une bonne partie de tout ce qui est standard dans Common Lisp et que donc on ferait mieux de partir directement dessus.
    D'autres qui expliquent que c'était un avantage concurrentiel fort pour telle startup qui a bien réussi.
    Et dans le monde Java, il y a Clojure qui est supposé plus puissant et productif que les autres (Kotlin, Scala, etc).
    Mais je n'ai jamais accroché.

    Citation Envoyé par jiherve Voir le message
    J'ai ferraillé (5S) début 2000 et à regrets une machine Symbolics , le top du top des années 90, car aucun IUT ni FAC n'en voulait!
    Oui dans les années 90, l'arrivée des processeurs RISC faisait qu'on avait de meilleures performances pour moins cher qu'avec les machines LISP dédiées.

  19. #18
    jiherve

    Re : boucle while

    re
    de mémoire on avait acheté la bécane pour 100KF , c’était pour du kaki.
    JR
    l'électronique c'est pas du vaudou!

  20. #19
    pm42

    Re : boucle while

    Citation Envoyé par jiherve Voir le message
    de mémoire on avait acheté la bécane pour 100KF , c’était pour du kaki.
    Oui ils aimaient bien payer 3 fois le prix.

  21. #20
    ilelogique

    Re : boucle while

    Je ne comprends pas qu'on donne une valeur booléenne à une chaîne de caractères.
    ok pour true ou false,
    While trompette, pourquoi ça ne renvoie pas syntax error ?
    Si "trompette" est défini bien sûr
    Dernière modification par ilelogique ; 11/05/2022 à 00h49.
    S'il n'y avait pas de vérité absolue, "toute vérité est relative" en serait une

  22. #21
    Merlin95

    Re : boucle while

    Citation Envoyé par ilelogique Voir le message
    ok merci, mais quel est alors l'intérêt d'avoir "4" qui soit vrai ?, pourquoi while 4 ne renvoie pas plutôt une erreur ? ça veut dire qu'il y a des situations avec des trucs du style "if 7" ou "while 4" qui servent ?
    En fait, à part les trucs faux, on décide que tout est vrai ? Même un sujet sans verbe (c'est à dire qui ne soit pas une proposition logique du type x<5)
    Tous les langages font-ils ça ???
    Par exemple, on pourrait imaginer un truc comme cà, tu peux faire :

    Code:
    ...
    while(array) {
         process(array);
         array.removeLast();
    }
    
    ...
    
    void process(array) {
       ...
    }

  23. #22
    Merlin95

    Re : boucle while

    Code de removeLast() :

    Code:
    void removeLast(array){
       array.removeLast();
       if(array.length==0) {
          return null;
       }
    
    }
    Dernière modification par Merlin95 ; 11/05/2022 à 05h47.

  24. #23
    Merlin95

    Re : boucle while

    Pardon y'a une erreur stupide, c'est en fait (et en plus complet) :

    Code:
    ...
    while(array) {
         ...
         process(array);
         removeLast();
         ...
    }
    
    ...
    
    void process(array) {
       ...
       if(array && array.length != 0) {
          processItem(array[array.length-1]);
        }
        ...
    }
    ...
    void removeLast(array){
       if(array && array.length==0) {
          return null;
       }
       array.removeLast();
    }
    Dernière modification par Merlin95 ; 11/05/2022 à 07h31.

  25. #24
    CM63

    Re : boucle while

    Citation Envoyé par ilelogique Voir le message
    Je ne comprends pas qu'on donne une valeur booléenne à une chaîne de caractères.
    ok pour true ou false,
    While trompette, pourquoi ça ne renvoie pas syntax error ?
    Si "trompette" est défini bien sûr
    En fait, c'est pour des considérations de conversion de type, il faut que les conversions de type marchent toujours, c'est pour cela qu'on a fait ce choix.
    Et ici il n'y a pas vraiment d'erreur de syntaxe.
    Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!

  26. #25
    pm42

    Re : boucle while

    Citation Envoyé par CM63 Voir le message
    En fait, c'est pour des considérations de conversion de type, il faut que les conversions de type marchent toujours, c'est pour cela qu'on a fait ce choix.
    Pas du tout. C'est simplement un raccourci pour éviter d'écrire :
    Code:
    if trompette is not None and trompette != "":

  27. #26
    stefjm

    Re : boucle while

    for(;;){} // en C
    Dernière modification par stefjm ; 15/05/2022 à 20h52.
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  28. #27
    pm42

    Re : boucle while

    Citation Envoyé par stefjm Voir le message
    for(;{} // en C
    Absolument pas. En C, c'est juste une boucle sans fin et cela n'a rien à voir avec le sujet du fil.
    D'autant plus qu'en C, il y a justement des boucles while avec là aussi des raccourcis d'évaluation assez différents de Python même si en apparence ils peuvent ressembler.
    Dernière modification par pm42 ; 15/05/2022 à 20h59.

  29. #28
    polo974

    Re : boucle while

    Citation Envoyé par stefjm Voir le message
    Code:
    for(;;){} // en C
    C'est vrai qu'en C, l'absence d'expression revoie "vrai", ce qui est aussi un raccourci qui peut surprendre.

    Et puis en shell, le binaire true renvoie 0 et false renvoie 1 (juste pour dire que globalement, c'est juste une histoire de convention qui a ses justifications et qu'il faut respecter si on veut utiliser le langage...).
    Jusqu'ici tout va bien...

  30. #29
    pm42

    Re : boucle while

    Citation Envoyé par polo974 Voir le message
    C'est vrai qu'en C, l'absence d'expression revoie "vrai", ce qui est aussi un raccourci qui peut surprendre.
    Pas en général. Si tu fais while(), tu vas avoir un message d'erreur.

    La boucle for est ultra-générale en C avec les 3 composantes, initialisation, action à chaque passage dans la boucle et critère d'arrêt qui sont facultatives. Et si rien n'indique à la boucle quand s'arrêter, elle continue et c'est au code de gérer via un break, return, longjmp, exit...

    Ce qui est amusant, c'est qu'à l'époque, cela donnait de la puissance expressive au programmeur qui pouvait optimiser son code aux petits oignons mais qu'aujourd'hui, c'est plutôt le contraire : cela complique le travail du compilateur plus qu'autre chose.

  31. #30
    Merlin95

    Re : boucle while

    Perso, j'aimais beaucoup utiliser le break ou return dans les structures de contrôle, parceque je trouvais et trouve encore que c'est plus lisible. J'ai appris après que dans la correspondance de Curry-Howard, cela correspond au raisonnement par l'absurde, donc pas si bête que cà.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Javascript Boucle dans Boucle (Array)
    Par Great.J dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 24/03/2020, 10h05
  2. relation entre gain statique en boucle ouverte et celui en boucle fermee
    Par invite21730e48 dans le forum Électronique
    Réponses: 4
    Dernier message: 29/09/2014, 21h47
  3. problème boucle interruption avec boucle spi
    Par invitef9a5b0e0 dans le forum Électronique
    Réponses: 8
    Dernier message: 16/03/2013, 03h26
  4. Diagramme de Bode boucle ouverte et boucle fermée
    Par invite29a24ce3 dans le forum Physique
    Réponses: 4
    Dernier message: 21/06/2012, 14h24
  5. Probleme boucle for ou boucle do...while imbriquées
    Par invite3d4f2ff3 dans le forum Électronique
    Réponses: 8
    Dernier message: 09/06/2010, 11h32