Sortir boucle en Python

Cyrion_81 -  
mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir,

Je débute en python et j’ai voulu faire un programme qui ajoute un élément dans une liste, qui peut afficher la liste ainsi que quitter le programme.
Je n'arrive pas a trouver la soluce pour ce faire

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érations et quand je presse la touche 3

Merci d'avance, un retraité curieux :).

2 réponses

Utilisateur anonyme
 
Bonjour
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
0
mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   7 883
 
Bonjour,

Est ce que "si j'ai fini toutes les opérations et quand je presse la touche 3" signifie "si on a fait au moins un ajout et au moins un affichage" ?

Si oui, il suffit de garder traces des choix faits jusqu'ici et de vérifier si l'ensemble {1, 2} est inclu ou égal à ces choix (si on tente de quitter avant d'avoir fait 1 et 2, 3 peut figurer parmi les choix faits).

Voici à quoi ça ressemble (avec quelques petits arrangements supplémentaires) :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

liste_elements = []
choix_faits = set()
while True:
    # Menu choix affiché
    choix = ""
    print( )
    print("-" * 80)
    print("Choisissez parmi les 3 options suivantes :")
    print("1: Ajouter un élément à la liste.")
    print("2: Afficher la liste.")
    print("3: Quitter.")

    # Test entrée est bien un chiffre
    choix = None
    while choix not in {1, 2, 3}:  
        try:
            choix = int(input("Votre choix ?"))
        except ValueError :  
            print("Erreur, votre choix doit être un nombre parmi {1, 2, 3} !", sys.stderr)   

    # Test du nombre entré et option exécutée
    if choix == 1 :
        print("Choix 1, ajouter un élément")
        ajouter = input("Votre ajout ?")
        liste_elements.append(ajouter)
    elif choix == 2 :
        print("Choix 2, Afficher la liste")
        print(liste_elements)
    elif choix == 3:
        print("Choix 3 , Quitter") 
        if  not {1, 2} <= choix_faits:
            print(f"Certains choix n'ont pas encore été faits {choix_faits} != {1, 2}")
        else:
            break
    choix_faits.add(choix)


Le programme est améliorable en rassemblant les opérations possibles (ajout, affichage, liste) dans une liste de labels et définir tes tests et
print
par rapport à cette liste.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

liste_elements = []
choix_faits = set()
choix_possibles = [
    "Ajouter un élément à la liste",
    "Afficher la liste",
    "Quitter",
]
    
while True:
    # Menu choix affiché
    choix = ""
    print( )
    print("-" * 80)
    print(f"Choisissez parmi les {len(choix_possibles)} options suivantes :")
    print("\n".join(
        f"{i + 1}: {choix_possible}."
        for (i, choix_possible) in enumerate(choix_possibles)
    ))

    # Test entrée est bien un chiffre
    choix = None
    while choix not in set(i + 1 for i in range(len(choix_possibles))):  
        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

    print(f"Choix {choix}, {choix_possibles[choix - 1]}")
    if choix == 1 :
        ajouter = input("Votre ajout ?")
        liste_elements.append(ajouter)
    elif choix == 2 :
        print(liste_elements)
    elif choix == 3:
        if len(choix_faits) < len(choix_possibles) - 1:
            print(f"Certains choix n'ont pas encore été faits {choix_faits}")
        else:
            break
    else:
        print("Choix {choix} par encore implémenté", sys.stderr)
    choix_faits.add(choix)


Bonne chance
0