Re: Sortir d 'une boucle while

Liste des GroupesRevenir à fcl python 
Sujet : Re: Sortir d 'une boucle while
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.python
Date : 31. Jan 2022, 10:27:05
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87a6fcpaxy.fsf@universite-de-strasbourg.fr.invalid>
References : 1
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Salut,

Comme l'a dit Benoît, le problème est le dernier "while" :

    while choix in liste_choix:
        if choix == 1 :
[...]

C'est trop tard pour faire une boucle : on a lu le choix (on ne le
relira pas dans cette boucle). Ce que tu veux tester c'est : est-ce un
choix valide ? Il faut faire cela avec "if", et seul le cas 3 garde son
"break" (qui permet maintenant de sortir du "while" le plus externe) :

    if choix == 1 :
        print("Choix 1, ajouter un élément")
        ajouter=input("Votre ajout ?")
        liste_elements.append(ajouter)
        ## break # plus approprié
   
    elif choix == 2 :
        print("Choix 2, Afficher la liste")
        print(liste_elements)
        ## break # plus approprié
  
    elif choix == 3:
        print("Choix 3 , Quitter")
        break

    else:
        print("Mauvais choix , recommencez")

Note aussi que j'ai mis des "elif" (else if) : une fois qu'on a trouvé
la valeur du choix ce n'est pas la peine de tester les autres. Le test
de la validité du choix est devenu un cas de la cascade de if. Mais le
menu est réaffiché après un choix incorrect.

En reprenant l'ensemble, tu as deux boucles "while" qui doivent
tester la valeur du choix. Vu de loin, cela devrait être :

choix = -1
while choix != 3:

    ... afficher le menu ...
    choix = -1
    while choix not in liste_choix:
        ... lire la valeur de choix ...

    if choix == 1:
        ... action 1 ...
    elif choix == 2:
        ... action 2 ...
    elif choix == 3
        pass # rien du tout, mais sortira de la boucle externe
    elif choix == 4:
        ... action 4 ...
    else:
        pass # en fait ce cas n'arrive jamais grâce au 2e while

Ici on relit le choix (sans réaffichage du menu) jusqu'à ce qu'il ait
une valeur correcte.

C'est un peu embêtant parce qu'on teste le choix (dans les while) avant
de l'avoir lu (d'où les "choix = -1" pour faire au moins un tour de
boucle) ; c'est pour ça que "while True" avec des break est un peu plus
simple. D'autres langages ont une boucle "do ... while ..." pour ça,
mais pas Python.

Note que l'action "lire la valeur de choix" contient encore un while,
que tu peux garder comme il est dans ton code. Dans l'idéal, on pourrait
en faire une fonction, ton programme deviendrait :

choix = -1
while choix != 3:

    choix = lecture_d_un_choix_correct ()
    if choix == 1:
        ... action 1 ...
    ... etc.

et la logique affichage/lecture/vérification se retrouve cantonnée dans
la fonction.

-- Alain.

P/S: je laisse ton code original ci-dessous (il apparaît bien indenté
chez moi, sauf pour quelques commentaires)

choix =""
liste_elements = []
liste_choix=[1,2,3,4,5]
while True:
#menu choix affiché
    choix =""
    print( )
    print("--------------------------------")
    print("Choisissez parmi les 3options suivantes :")
    print("1: Ajouter un élément à la liste.")
    print("2: Afficher la liste.")
    print("3: Quitter.")
   
#test entrée est bien un chiffre
    while True: 
        try:
            choix=int(input("Votre choix ?"))
            break   
        except ValueError : 
            print("Erreur, votre choix doit etre un nombre!")  
>
#test du nombre entré et option exécutée
  
    while choix in liste_choix:
        if choix == 1 :
            print("Choix 1, ajouter un élément")
            ajouter=input("Votre ajout ?")
            liste_elements.append(ajouter)
            break
       
        if choix == 2 :
            print("Choix 2, Afficher la liste")
            print(liste_elements)
            break
      
        if choix == 3:
            print("Choix 3 , Quitter")
            break
>
    Je cherche a quitter le premier while ( le menu )uniquement si j ai fini
toutes les opérarions et pressant la touche 3
>
merci de votre aide pour un retraité curieux, l identation n 'est pas visible
dans mon message malgré sa perésence lors de la composition

Date Sujet#  Auteur
31 Jan 22 * Sortir d 'une boucle while5Cyrion81
31 Jan 22 +- Re: Sortir d 'une boucle while1Dominique
31 Jan 22 +- Re: Sortir d 'une boucle while1Benoit Izac
31 Jan 22 +- Re: Sortir d 'une boucle while1Alain Ketterlin
1 Feb 22 `- Re: Sortir d 'une boucle while1Th.A.C

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal