Résolue

Projet la liste de course, problème choix 3

# Boucles # Listes # Scripting

Gabriel Trouvé

Mentor

Re,


Je suis sur la liste de course.

J'ai une étape qui n'a pas l'air de fonctionner.

J'ai ajouté un objet dans ma liste de courses.

Quand je fais choix 3 pour afficher ce qu'il y a dedans ça me dit qu'elle est vide.

Est-ce que vous avez un indice qui pourrait m'aiguiller ? Car le reste de mon script a l'air de fonctionner.


Merci


liste_de_courses = []
element_ajouter = ""
element_retirer = ""
while True:
    print("Choissisez parmi les 5 options suivantes :\n"
    "1 : Ajouter un élément à la liste\n"
    "2 : Retirer un élément de la liste\n"
    "3 : Afficher la liste\n"
    "4 : Vider la liste\n"
    "5 : Quitter")
    choix_utilisateur = input("==> Votre choix : ")
    if choix_utilisateur == "1":
        element_ajouter = input("Entrez le nom d'un élément à ajouter à la liste de courses : ")
        liste_de_courses.append(element_ajouter)
        print(f"L'élément {element_ajouter} a bien été ajouté à la liste.")
    elif choix_utilisateur == "2":
        element_retirer = input("Entrez le nom d'un élément à retirer de la liste de courses : ")
        if element_retirer in liste_de_courses:
            liste_de_courses.remove(element_retirer)
        else:
            print(f"L'élément {element_retirer} n'est pas dans la liste.")
    elif choix_utilisateur == "3":
        if liste_de_courses == True:
            print("Voici le contenu de votre liste:")
            for i, element in enumerate(liste_de_courses):
                print(f"{i + 1}. {element}")
        else:
            print("La liste de course est vide.")
    elif choix_utilisateur == "4":
        liste_de_courses.clear()
        print("La liste a été vidée de son contenu.")
    elif choix_utilisateur == "5":
        break
    else:
        print("Veuillez entrer un choix valide.")


print("A bientôt !")

hello,


c'est ta condition d'affichage de la liste qui n'est pas bonne. Ta liste se remplie bien.

Avec ta condition tu teste si ta liste est un booléen True. Or ta liste n'est pas un booléen. Tu dois tester si ta liste est vide ou non.

Je te laisse trouver mais si tu as besoin dis moi et je te donnerai un moyen de vérifier si une liste est vide ou non.

Gabriel Trouvé

Mentor

Ah je croyais qu'une liste vide retournait false. Et une avec au moins un élément True. J'ai du mal comprendre.

J'ai essayé avec len mais ça veut pas :

elif choix_utilisateur == "3":
        if len(liste_de_courses) > 0:
            print("Voici le contenu de votre liste:")
            for i, element in enumerate(liste_de_courses):
                print(f"{i + 1}. {element}")
        else:
            print("La liste de course est vide.")

Ta solution avec len devrait fonctionner. ça fonctionne chez moi. Tu n'as pas un problème d'indentation ?

Gabriel Trouvé

Mentor

Merci c'est bon oui. J'ai relancé le script et ça fonctionne.

Juste, Une liste vide retourne False ?

Alors pk je ne peux pas faire ma variable == False ? ça serait plutôt ma variable is False ? Ou aucun des deux ?

En fait tu ne peux pas utiliser False ou True pour une liste qu'elle soit vide ou remplie.


In [1]: ma_liste = []

In [2]: ma_liste == False
Out[2]: False

In [3]: ma_liste == True
Out[3]: False

In [4]: ma_liste.append(1)

In [5]: ma_liste == True
Out[5]: False

In [6]: ma_liste == False
Out[6]: False


tu vois que dans tous les cas, la condition sera False.



Thibault houdon

Mentor

Salut Gabriel !


Je ne sais plus si j'en parle en ces termes dans les vidéos théoriques de la formation, mais ce qu'il faut comprendre c'est que ce n'est pas la liste en tant que telle qui est vraie ou fausse mais son évaluation en booléen. Je prends garde désormais de dire précisément ceci quand j'en parle en vidéo ou en mentorat car je sais que quand on débute on est un peu perdu avec ça.


Quand tu fais :

ma_liste == True


Ça te retourne False car le symbole d'égalité (==) vérifie l'égalité des valeurs.


Et ta liste n'est en aucune façon égale à la même valeur qu'un booléen (10 == 10 retourne True car 10 est bien égal à 10, mais [] n'est pas égal à True pas plus que [1, 2, 3] ou n'importe quelle autre liste).


Maintenant, l'évaluation d'une liste en booléen retournera False ou True en fonction de si la liste contient 0 ou 1 élément et plus.


L'évaluation en booléen = quand tu utilises bool sur ta liste :


>>> bool([])
False
>>> bool([1])
True


Je te conseille de lire le glossaire sur les booléens, je parle de cette évaluation des types natifs en booléen. À chaque fois, 1 valeur retournera False et toutes les autres retourneront True.


Pour les nombres par exemple, 0 retournera False (bool(0) 👉 False) et tous les autres nombres retourneront True (bool(-1) 👉 True, bool(1) 👉 True, etc).


J'espère que c'est plus clair :)

Gabriel Trouvé

Mentor

D'accord merci.


Et aussi voici mon code finale pour le projet liste de course.

Je n'ai pas encore regardé la solution.

Est-ce que c'est bien ou pas ?


liste_de_courses = []
element_ajouter = ""
element_retirer = ""
while True:
    print("Choissisez parmi les 5 options suivantes :\n"
    "1 : Ajouter un élément à la liste\n"
    "2 : Retirer un élément de la liste\n"
    "3 : Afficher la liste\n"
    "4 : Vider la liste\n"
    "5 : Quitter")
    choix_utilisateur = input("==> Votre choix : ")
    if choix_utilisateur == "1":
        element_ajouter = input("Entrez le nom d'un élément à ajouter à la liste de courses : ")
        liste_de_courses.append(element_ajouter)
        print(f"L'élément {element_ajouter} a bien été ajouté à la liste.")
    elif choix_utilisateur == "2":
        element_retirer = input("Entrez le nom d'un élément à retirer de la liste de courses : ")
        if element_retirer in liste_de_courses:
            liste_de_courses.remove(element_retirer)
        else:
            print(f"L'élément {element_retirer} n'est pas dans la liste.")
    elif choix_utilisateur == "3":
        if len(liste_de_courses) > 0:
            print("Voici le contenu de votre liste:")
            for i, element in enumerate(liste_de_courses):
                print(f"{i + 1}. {element}")
        else:
            print("La liste de course est vide.")
    elif choix_utilisateur == "4":
        liste_de_courses.clear()
        print("La liste a été vidée de son contenu.")
    elif choix_utilisateur == "5":
        break
    else:
        print("Veuillez entrer un choix valide.")


print("A bientôt !")

hello,


oui pour moi c'est bien et c'est comme ça aussi que je fais pour tester si une liste est vide ou non .

Gabriel Trouvé

Mentor

Ok merci. Je clôture. J'ai commencé à regarder la solution de Thibaut pour le projet et c'est différent de ce que j'ai fait. C'est pour ça ça me stressait un peu.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.