Sortir boucle en Python

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

  1. Modérateur
    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