Vérifier un élément dans une liste

Résolu/Fermé
Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 - 12 déc. 2022 à 15:16
Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 - 15 déc. 2022 à 13:35

Bonjour,

je suis débutant sur python et j'essaie de créer une sorte de ticket de caisse. Je présente 3 articles et je demande au client d'inscrire le numéro qui correspond à son choix. Pour vérifier que le chiffre correspond à un article, j'ai créé une liste avec les numéros des articles. Le problème c'est que peu importe la façon dont j'écris la vérification dans la liste, ça ne fonctionne pas. 

J'ai essayé d'utiliser 'and' au lieu de 'or', d'utiliser la fonction 'choice_customer not in choice_list' au lieu de .count mais je n'y arrive jamais.

Merci d'avance


Windows / Chrome 107.0.0.0

2 réponses

jee pee Messages postés 39358 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mars 2024 9 197
12 déc. 2022 à 15:36

Bonjour,

Je vois déjà 2 soucis. isdigit() est une fonction, il manque les () choice_customer.isdigit(). Après la réponse sur un input est une chaine, Choice est une liste d'entiers, 1 n'est pas égal à "1".

PS : il faut nous donner le code, pas une image, et pour afficher du code, il faut utiliser l'icone spécialisée <>, et donner le langage, Python, pour la coloration syntaxique.

1
Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 1
Modifié le 12 déc. 2022 à 15:43

Bonjour,

merci jee pee pour les conseils et les corrections. C'est mon premier post et déjà j'avais du mal à mettre une image .. bon,,,

Au final j'ai réussi à faire fonctionner mon code, j'ai demandé à un ami de m'aider. J'ai tendance à trop utiliser une boucle while.

Merci pour la réponse rapide ! 

while True:
    try:
        choice_customer = int(input())
        if choice_list.count(choice_customer) > 0 :
            break
        elif choice_list.count(choice_customer) <= 0 :
            print("Please enter a valid number : ")
        
    except ValueError:
        print("Please enter a valid number : ")
1
jee pee Messages postés 39358 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mars 2024 9 197 > Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022
12 déc. 2022 à 15:56

Cette façon de procéder, avec une boucle, et la gestion des erreurs est nettement préférable à ta première proposition ;-)

0
mamiemando Messages postés 32974 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 mars 2024 7 729
Modifié le 12 déc. 2022 à 15:49

Bonjour,

Comme jeepee l'indique, merci de partager ton code comme expliqué ici.

Pour préciser la réponse de jeepee, ton programme devrait plus probablement ressembler à ceci :

import sys

def prompt_choice(
    choices: iter,
    message: str = "",
    cast: callable = None
):
    if cast is None:
        cast = lambda x: x
    choice = cast(input(message))
    while choice not in choices:
        print(f"{choice} is an invalid choice (not in {choices}", file=sys.stderr)
        choice = cast(input(message))
    return choice

articles = [1, 2, 3]
print(f"articles = {articles}")
article = prompt_choice(
    articles,
    f"Choisir un article parmi {articles}: ",
    int
)
print(f"article = {article}")

Résultat :

articles = [1, 2, 3]
Choisir un article parmi [1, 2, 3]: 4
4 is an invalid choice (not in [1, 2, 3]
Choisir un article parmi [1, 2, 3]: 2
article = 2

Bonne chance

1
Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 1
12 déc. 2022 à 16:11

Bonjour mamiemando,

mon code pour insérer un nouvel article ressemble à ça, comme je suis encore débutant je n'utilise que les fonctions de base que je comprends. 

choice_number = 0
choice_list = []
#Pink Hair Doll
choice_number += 1
choice_list.append(choice_number)
PHD_number = choice_number
PHD_price_hour = 5000.00
PHD_description = """
Pink Hair Doll, PHD for short. It does not grant you the Doctor title but you can make it a doctor. You can play with its hair and undress it anywhere. """
#Black Hellish chains
choice_number += 1
choice_list.append(choice_number)
BHC_number = choice_number
BHC_price_hour = 3000.00
BHC_description = """
Black Hellish Chains, BHC for short. They burn so much that it can't be used to chain things up. Plastic gloves recommended.  """
#White Stout Cat
choice_number += 1
choice_list.append(choice_number)
WSC_number = choice_number
WSC_price_hour = 3500.00
WSC_description = """
White Stout Cat, WSC for short. Its way to defend your home makes it the perfect ferocious guard."""
#Print the choices
print("""
EEEEE    OOO    RRRR    ZZZZZ   EEEEE     A  
E       O   O   R   R       Z   E        A A 
E       O   O   R   R      Z    E       A   A
EEE     O   O   RRRR      Z     EEE     AAAAA
E       O   O   R R      Z      E       A   A
E       O   O   R  R    Z       E       A   A
EEEEE    OOO    R   R   ZZZZZ   EEEEE   A   A

______________________________________________
""")

print(f"""
Hello and Welcome to Eorzea ! Choose your item and enjoy.  
>> {PHD_number}. {PHD_description}
PRICE PER 1 HOUR ---- {PHD_price_hour}
>> {BHC_number}. {BHC_description}
PRICE PER 1 HOUR ---- {BHC_price_hour}
>> {WSC_number}. {WSC_description}
PRICE PER 1 HOUR ---- {WSC_price_hour}
""")
#Get the choices
print("______________________________________________\nWhich one will you choose ? Type the corresponding number : ")
while True:
    try:
        choice_customer = int(input())
        if choice_list.count(choice_customer) > 0 :
            break
        elif choice_list.count(choice_customer) <= 0 :
            print("Please enter a valid number : ")
        
    except ValueError:
        print("Please enter a valid number : ")

print("For how many hours ? : ")
while True:
    try:
        hour_customer = int(input())
    except ValueError:
        print("Please enter a valid number of hour (integer) : ")

Est-ce que c'est possible de le raccourcir pour mon niveau ?

Merci d'avance

0
mamiemando Messages postés 32974 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 mars 2024 7 729 > Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022
12 déc. 2022 à 16:28

Tu peux simplifier le programme précédent ainsi, il sera moins général mais fera ce que tu veux :

def prompt_choice(choices):
    choice = int(input(f"Choisir une valeur parmi {choices}: "))
    while choice not in choices:
        print(f"{choice} is an invalid choice (not in {choices}")
        choice = int(input(f"Choisir une valeur parmi {choices}: "))
    return choice

articles = [1, 2, 3]
print(f"articles = {articles}")
article = prompt_choice(articles)
print(f"article = {article}")

Bonne chance

1
Khbeoze Messages postés 4 Date d'inscription lundi 12 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 1 > mamiemando Messages postés 32974 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 mars 2024
15 déc. 2022 à 13:35

Merci beaucoup !

0