Path: ...!news.nobody.at!weretis.net!feeder8.news.weretis.net!news.mixmin.net!aioe.org!Faqf6A55NG1s8DSVkh3L9A.user.46.165.242.75.POSTED!not-for-mail From: Alain Ketterlin Newsgroups: fr.comp.lang.python Subject: Re: Sortir d 'une boucle while Date: Mon, 31 Jan 2022 09:27:05 +0100 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Message-ID: <87a6fcpaxy.fsf@universite-de-strasbourg.fr.invalid> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: gioia.aioe.org; logging-data="23115"; posting-host="Faqf6A55NG1s8DSVkh3L9A.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:ZSOAWVnEHW8CHN7Rj5lzQdAerQw= X-Notice: Filtered by postfilter v. 0.9.2 Bytes: 5513 Lines: 136 Salut, Comme l'a dit Beno=C3=AEt, le probl=C3=A8me est le dernier "while" : > while choix in liste_choix: > if choix =3D=3D 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 =3D=3D 1 : print("Choix 1, ajouter un =C3=A9l=C3=A9ment") ajouter=3Dinput("Votre ajout ?") liste_elements.append(ajouter) ## break # plus appropri=C3=A9 =20=20=20=20 elif choix =3D=3D 2 : print("Choix 2, Afficher la liste") print(liste_elements) ## break # plus appropri=C3=A9 =20=20=20 elif choix =3D=3D 3: print("Choix 3 , Quitter")=20 break else: print("Mauvais choix , recommencez") Note aussi que j'ai mis des "elif" (else if) : une fois qu'on a trouv=C3=A9 la valeur du choix ce n'est pas la peine de tester les autres. Le test de la validit=C3=A9 du choix est devenu un cas de la cascade de if. Mais le menu est r=C3=A9affich=C3=A9 apr=C3=A8s un choix incorrect. En reprenant l'ensemble, tu as deux boucles "while" qui doivent tester la valeur du choix. Vu de loin, cela devrait =C3=AAtre : choix =3D -1 while choix !=3D 3: ... afficher le menu ... choix =3D -1 while choix not in liste_choix: ... lire la valeur de choix ... if choix =3D=3D 1: ... action 1 ... elif choix =3D=3D 2: ... action 2 ... elif choix =3D=3D 3 pass # rien du tout, mais sortira de la boucle externe elif choix =3D=3D 4: ... action 4 ... else: pass # en fait ce cas n'arrive jamais gr=C3=A2ce au 2e while Ici on relit le choix (sans r=C3=A9affichage du menu) jusqu'=C3=A0 ce qu'il= ait une valeur correcte. C'est un peu emb=C3=AAtant parce qu'on teste le choix (dans les while) avant de l'avoir lu (d'o=C3=B9 les "choix =3D -1" pour faire au moins un tour de boucle) ; c'est pour =C3=A7a que "while True" avec des break est un peu plus simple. D'autres langages ont une boucle "do ... while ..." pour =C3=A7a, 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=C3=A9al, on pourra= it en faire une fonction, ton programme deviendrait : choix =3D -1 while choix !=3D 3: choix =3D lecture_d_un_choix_correct () if choix =3D=3D 1: ... action 1 ... ... etc. et la logique affichage/lecture/v=C3=A9rification se retrouve cantonn=C3=A9= e dans la fonction. -- Alain. P/S: je laisse ton code original ci-dessous (il appara=C3=AEt bien indent= =C3=A9 chez moi, sauf pour quelques commentaires) > choix =3D"" > liste_elements =3D [] > liste_choix=3D[1,2,3,4,5] > while True: > #menu choix affich=C3=A9 > choix =3D"" > print( ) > print("--------------------------------") > print("Choisissez parmi les 3options suivantes :") > print("1: Ajouter un =C3=A9l=C3=A9ment =C3=A0 la liste.") > print("2: Afficher la liste.") > print("3: Quitter.") >=20=20=20=20=20 > #test entr=C3=A9e est bien un chiffre > while True:=20=20 > try: > choix=3Dint(input("Votre choix ?")) > break=20=20=20=20 > except ValueError :=20=20 > print("Erreur, votre choix doit etre un nombre!")=20=20=20 > > #test du nombre entr=C3=A9 et option ex=C3=A9cut=C3=A9e >=20=20=20=20 > while choix in liste_choix: > if choix =3D=3D 1 : > print("Choix 1, ajouter un =C3=A9l=C3=A9ment") > ajouter=3Dinput("Votre ajout ?") > liste_elements.append(ajouter) > break >=20=20=20=20=20=20=20=20=20 > if choix =3D=3D 2 : > print("Choix 2, Afficher la liste") > print(liste_elements) > break >=20=20=20=20=20=20=20=20 > if choix =3D=3D 3: > print("Choix 3 , Quitter")=20 > break > > Je cherche a quitter le premier while ( le menu )uniquement si j ai f= ini > toutes les op=C3=A9rarions et pressant la touche 3 > > merci de votre aide pour un retrait=C3=A9 curieux, l identation n 'est pa= s visible > dans mon message malgr=C3=A9 sa per=C3=A9sence lors de la composition