Boucle while, pourquoi
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

Boucle while, pourquoi



  1. #1
    frequi1

    Boucle while, pourquoi


    ------

    Bonjour, encore moi

    Déja le code:
    Code:
    f = lambda x : x* x
    
    encore = 1
    while encore == 1:
        # resultat avec fonction lambda
        saisie_utilisateur = int(input("quel carré voulez vous calculer : "))
        carré = f(saisie_utilisateur)
        print(f"Le carré de {saisie_utilisateur} est {carré}")
        choix_utilisateur = int(input("Voulez-vous recommencer ? : (1.oui/2.non)\n")) #< ------------Pas de problème jusque la
        while (choix_utilisateur == 1 or choix_utilisateur == 2):
            if choix_utilisateur == 1:
                encore = 1
            elif choix_utilisateur == 2:
                encore = 0
            else:
                print("Choix impossible")
    Alors voila la deuxième boucle while ne fonctionne pas, ça doit etre completement C.. mais je vois pas. si quelqu'un voit mieux, merci à lui

    -----
    Dernière modification par frequi1 ; 21/07/2022 à 15h58.

  2. #2
    frequi1

    Re : Boucle while, pourquoi

    Code:
    f = lambda x: x * x
    
    encore = True
    while encore:  # tant que encore est vrai
        saisie_utilisateur = int(input("quel carré voulez vous calculer : "))
        carré = f(saisie_utilisateur)
        print(f"Le carré de {saisie_utilisateur} est {carré}")
        choix_utilisateur = int(input("Voulez-vous recommencer ? : (1.oui/2.non)\n"))
        #while choix_utilisateur != 1 or choix_utilisateur != 2:  # tant que choix_utilisateur est different de 1 ou 2
        if choix_utilisateur == 1:
            encore = True
            print(f"recommencons ")
    
        elif choix_utilisateur == 2:
            encore = False
            print(f"Au revoir ")
    
        else:
            print("Choix impossible ")
            choix_utilisateur = int(input("1. Oui/2. Non"))
            if choix_utilisateur == 2:
                encore = False
                print(f"Au revoir")
    Ca fonctionne mieux comme ça.

  3. #3
    Garion

    Re : Boucle while, pourquoi

    Je ne connais pas les subtilités de python mais dans d'autre langages :
    while (choix_utilisateur == 1 or choix_utilisateur == 2)
    Est ambigu au niveau du parenthésage.
    Vaut mieux écrire
    while (choix_utilisateur == 1) or (choix_utilisateur == 2)

  4. #4
    Garion

    Re : Boucle while, pourquoi

    Sinon, si on prend les opérateurs dans l'ordre, ça reviendrait à :
    while (((choix_utilisateur == 1) or choix_utilisateur) == 2)
    Mais bon, je ne sait pas si Python l'interpréte vraiment comme ça

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

    Re : Boucle while, pourquoi

    aucun soucis sur ça (il n'y a aucune ambiguïté possible), la problématique initiale c'était surtout que la variable n'était jamais mise à jour dans la boucle

  7. #6
    frequi1

    Re : Boucle while, pourquoi

    Citation Envoyé par umfred Voir le message
    aucun soucis sur ça (il n'y a aucune ambiguïté possible), la problématique initiale c'était surtout que la variable n'était jamais mise à jour dans la boucle
    Oui c'est exactement ça ..... comment fallait il faire pour la mise a jour de la variable à travers la boucle

  8. #7
    CM63

    Re : Boucle while, pourquoi

    Les initialisations se font toujours avant les boucles et pas dans les boucles.
    Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!

  9. #8
    Garion

    Re : Boucle while, pourquoi

    Citation Envoyé par umfred Voir le message
    aucun soucis sur ça (il n'y a aucune ambiguïté possible), la problématique initiale c'était surtout que la variable n'était jamais mise à jour dans la boucle
    Ca dépend du langage.
    En Delphi par exemple, l'opérateur "or" est prioritaire en théorie à "=" ("==" en python).
    Mais en pratique le compilateur force dans ce cas là à mettre des parenthèses.
    Je me posais donc la question, ne connaissant Python.
    Mais oui, j'ai juste vu ça et pas le reste qui expliquait le problème.

  10. #9
    Garion

    Re : Boucle while, pourquoi

    D'ailleurs, j'ai toujours trouvé le "=" maladroit dans certains langages.
    En C ou en Pyhon on peut écrire "A = A + 1".
    Ce qui mathématiquement est absurde.
    Je trouve que le pascal est plus logique ":=" est une affectation et "=" est un test d'égalité.

  11. #10
    polo974

    Re : Boucle while, pourquoi

    Il ne faut pas confondre informatique et mathématiques, les symboles n'y ont pas toujours le même sens.

    Et l'affectation ( genre A=A+1 ) arrive plus souvent que le test ( genre A == B ) et comme l'informaticien est un animal paraisseux (sinon pourquoi voudrait-il automatiser ses calculs ), il fait au plus court...

    Au point qu'en C il y a A+=1 et même A++ ou ++A (qui n'ont pas tout à fait le même comportement) (on atteind là le sublime (re )...)
    Jusqu'ici tout va bien...

  12. #11
    pm42

    Re : Boucle while, pourquoi

    Citation Envoyé par Garion Voir le message
    D'ailleurs, j'ai toujours trouvé le "=" maladroit dans certains langages.
    En C ou en Pyhon on peut écrire "A = A + 1".
    Ce qui mathématiquement est absurde.
    Comme le dit polo974, on ne fait pas des maths mais de l'informatique et on a donc du adapter pas mal de choses. Par exemple, la multiplication est faite avec le signe * et pas x, la puissance avec **, ^ ou pow et pas en exposant, les indices avec des [] qui ne représentent pas une notation matricielle ou autre, etc.


    Citation Envoyé par Garion Voir le message
    Je trouve que le pascal est plus logique ":=" est une affectation et "=" est un test d'égalité.
    Dans d'autres langages, l'affectation est le <-.
    Le débat est ancien et à l'époque du C, les concepteurs ont considéré qu'on écrivait beaucoup plus souvent une affectation qu'un test d'égalité. Ils ont donc choisi = pour l'affectation et == pour l'égalité.
    L'idée était de garder le code concis.

    Cette logique s'est imposée même dans les langages verbeux. On peut aussi remarquer que cela ne pose pas de problème, quiconque a dépassé le niveau débutant qui lit ses 1ères pages de programmation s'y est fait très vite et cela ne pose non plus pas spécialement de problème de maintenance ou de lisibilité (sujets qu'on a étudié en suivant avec des capteurs IR les mouvements des yeux des programmeurs qui lisent du code, ce qui a permis de constater que ce sont les abréviations qui ralentissent).
    Dernière modification par pm42 ; 24/07/2022 à 08h38.

  13. #12
    Brinicle

    Re : Boucle while, pourquoi

    Bonjour,

    Au point qu'en C il y a A+=1
    Ça existe aussi en python. Personnellement, j'aime bien ces +=, -=, *=, /= et **= .
    Mais il n'y a pas de ++ et -- (sic).

    Je ne connais pas les subtilités de python mais dans d'autre langages :
    while (choix_utilisateur == 1 or choix_utilisateur == 2)
    Est ambigu au niveau du parenthésage.
    Vaut mieux écrire
    while (choix_utilisateur == 1) or (choix_utilisateur == 2)
    Ça peut étre le cas en python : lorsque l'on fait des test d'égalités sur les arrays de numpy, il FAUT mettre les parenthèses.
    Ne jamais faire un calcul sans connaître son résultat !

  14. #13
    pm42

    Re : Boucle while, pourquoi

    Citation Envoyé par Brinicle Voir le message
    Ça peut étre le cas en python : lorsque l'on fait des test d'égalités sur les arrays de numpy, il FAUT mettre les parenthèses.
    C'est une question de priorité des opérateurs. En python, on peut très bien écrire :

    Code:
    while choix_utilisateur == 1 or choix_utilisateur == 2
    Il n'y a pas besoin de parenthèses autour de l'expression et elle est interprétée sans ambiguité avec les == qui sont évalués avant le or.

    En numpy/pandas dans les array ou dataframe, on calcule des masques binaires et on utilise donc les opérateurs & et | plutôt que "and" et "or". Là, les priorités des opérateurs sont différentes (ce qui est logique) et il faut mettre des parenthèses.

  15. #14
    polo974

    Re : Boucle while, pourquoi

    perso, je préfère mettre "trop" de parenthèses, au point que j'encadre parfois toute l'expression pour pouvoir passer à la ligne et ainsi rendre la chose plus lisible
    Code:
    while (    (choix_utilisateur == 1) 
            or (choix_utilisateur == 2) ):
        pass # ou autre chose...
    (je n'aime pas le backslash en fin de ligne...)
    Jusqu'ici tout va bien...

  16. #15
    pm42

    Re : Boucle while, pourquoi

    Dans le cas de Python il y a une norme de formattage qu’on n’est pas obligé de respecter bien sûr sauf si on participe à des projets open-source par exemple.
    Et elle n’autorise pas les parenthèses inutiles.
    Certains IDE le signalent d’ailleurs.

  17. #16
    polo974

    Re : Boucle while, pourquoi

    Ah zut, il faut que je révise les PEP...

    Mais quand on est coincé avec le 80 ou 100 car par ligne et qu'on est au 5ème niveau d'indentation, on se retrouve vite à devoir passer à la ligne, surtout quand on évite les noms de variable sibyllins et en plus quand on se coltine le self, ça fini par être verbeux (pour un code 100% perso, je remplace self par s, mais c'est aussi une entorse à la PEP)...
    Jusqu'ici tout va bien...

  18. #17
    pm42

    Re : Boucle while, pourquoi

    Oui, c’est les joies de Python.
    J’aime bien aussi quand à cause d’une erreur vite fixée mon main se retrouve à 1 niveau d’indentation parce que l’IDE a reformatté ce qui fait que quand je le lance, il ne fait rien avec aucun message.

    Je n’apprécie pas spécialement la structure par indentation, encore moins le self partout, le côté non typé me fait perdre un temps fou et l’absence de miltithreading digne de ce nom est ridicule.
    Bref je n’aime pas ce langage qui est pourtant très pratique.

  19. #18
    Garion

    Re : Boucle while, pourquoi

    Citation Envoyé par pm42 Voir le message
    Cette logique s'est imposée même dans les langages verbeux. On peut aussi remarquer que cela ne pose pas de problème, quiconque a dépassé le niveau débutant qui lit ses 1ères pages de programmation s'y est fait très vite et cela ne pose non plus pas spécialement de problème de maintenance ou de lisibilité (sujets qu'on a étudié en suivant avec des capteurs IR les mouvements des yeux des programmeurs qui lisent du code, ce qui a permis de constater que ce sont les abréviations qui ralentissent).
    Ca ne me pose pas de problème non plus, je sais lire pas mal de langages, j'ai juste dit que c'était maladroit comme choix.

  20. #19
    Garion

    Re : Boucle while, pourquoi

    Citation Envoyé par pm42 Voir le message
    Dans le cas de Python il y a une norme de formattage qu’on n’est pas obligé de respecter bien sûr sauf si on participe à des projets open-source par exemple.
    Et elle n’autorise pas les parenthèses inutiles.
    Certains IDE le signalent d’ailleurs.
    Ça, en revanche, ça limite la lisibilité quand on n'est pas expert du langage.
    Sans parenthèse, cela nécessite de connaitre les priorités des opérateurs, avec les parenthèses, pas besoin de connaitre spécialement le langage.

  21. #20
    umfred

    Re : Boucle while, pourquoi

    ça me fait un peu penser aux "défis mathématiques" qu'on trouve parfois sur les réseaux sociaux du type "calculez 2-5x6+3= ?" où l'on retrouve 2 logiques: la logique mathématique avec la priorité des opérations (2-(5x6)+3=-25) ou la logique séquentielle ((2-5)x6)+3=-15)

  22. #21
    pm42

    Re : Boucle while, pourquoi

    Citation Envoyé par umfred Voir le message
    ça me fait un peu penser aux "défis mathématiques" qu'on trouve parfois sur les réseaux sociaux du type "calculez 2-5x6+3= ?" où l'on retrouve 2 logiques: la logique mathématique avec la priorité des opérations (2-(5x6)+3=-25) ou la logique séquentielle ((2-5)x6)+3=-15)
    Ceci dit que ce soit en maths ou en informatique, on définit assez rigoureusement la priorité des opérateurs. Et dans les langages actuels, elle est pratiquement toujours la même ce qui simplifie la vie.
    Dans le cas que tu cites, la logique séquentielle n'est pas la bonne et je pense qu'on apprend ça assez tôt à l'école.

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. Pourquoi le temps serais pas en boucle?
    Par extrazlove dans le forum Archives
    Réponses: 22
    Dernier message: 23/06/2013, 15h43
  4. problème boucle interruption avec boucle spi
    Par invitef9a5b0e0 dans le forum Électronique
    Réponses: 8
    Dernier message: 16/03/2013, 03h26
  5. Diagramme de Bode boucle ouverte et boucle fermée
    Par invite29a24ce3 dans le forum Physique
    Réponses: 4
    Dernier message: 21/06/2012, 14h24