2 votes

Recevoir un message d'erreur en essayant de sortir d'une boucle while en Python

Je suis en train d'essayer d'écrire du code qui inclut ce qui suit:

1) Utilise un test conditionnel dans l'instruction while pour arrêter la boucle.

2) Utilise une variable active pour contrôler la durée d'exécution de la boucle.

3) Utilise une instruction break pour sortir de la boucle lorsque l'utilisateur entre une valeur 'quit'.

Voici mon code :

prompt = "Quel âge avez-vous ?"
prompt += "\nEntrez 'quit' pour quitter : "

while True:
    age = input(prompt)
    age = int(age)

    if age == 'quit':
        break
    elif age < 3:
        print("Votre billet est gratuit.")
    elif 3 <= age <=12:
        print("Votre billet coûte 10$.")
    elif 12 < age:
        print("Votre billet coûte 15$.")
    else:
        print("Veuillez entrer un âge valide.")

Je pense avoir correctement répondu aux parties 1 et 2 mais chaque fois que j'entre 'quit' ou tout autre mot pour tester la partie 3, je reçois un message d'erreur qui indique: "ValueError: invalid literal for int() with base 10: 'quit'"

Est-ce que quelqu'un a des suggestions sur ce que je pourrais faire de mal dans mon code? Merci pour votre temps.

5voto

TigerhawkT3 Points 25584

Vous convertissez l'entrée de l'utilisateur en un nombre avant de vérifier si cette entrée est effectivement un nombre. Passez de ceci :

age = input(prompt)

age = int(age)

if age == 'quit':
    break
elif age < 3:
    print("Votre billet est gratuit.")

À ceci :

age = input(prompt)

if age == 'quit':
    break

age = int(age)

if age < 3:
    print("Votre billet est gratuit.")

Cela vérifiera d'abord la demande de sortie avant de supposer que l'utilisateur a saisi un nombre.

1voto

Li357 Points 31390

Vous convertissez l'âge en entier avec int() afin qu'il ne soit jamais égal à 'quit'. Faites d'abord la vérification de quit, puis convertissez en entier :

age = input(prompt)

if age == 'quit':
    break;

age = int(age)
...

Cela vérifie maintenant s'il est égal à une chaîne littérale en premier, de sorte que dans le cas où il l'est, il s'arrête correctement. Sinon, continuez normalement.

1voto

Loïc Points 7529

Vous êtes en train de convertir la chaîne "quit" en entier, et python vous dit que c'est incorrect.

Ceci fonctionnera :

prompt = "Quel âge avez-vous ?"   
prompt += "\nEntrez 'quit' pour quitter : "
while True:
    age = input(prompt)       
    if age == 'quit':
        break
    age = int(age)
    if age < 3:
        print("Votre billet est gratuit.")
    elif 3 <= age <=12:
        print("Votre billet coûte $10.")
    elif 12 < age:
        print("Votre billet coûte $15.")
    else:
        print("Veuillez entrer un âge valide.")

1voto

idjaw Points 9280

Juste pour montrer quelque chose de différent, vous pouvez en fait utiliser un try/except ici pour attraper une ValueError et dans votre bloc d'exception, vous pouvez vérifier quit et break en conséquence. De plus, vous pouvez simplifier légèrement votre invite d'entrée pour gagner quelques lignes.

Vous pouvez également forcer la casse de quit en minuscules afin de permettre qu'il soit écrit dans n'importe quelle casse et le forcer à un seul cas et vérifier quit (si quelqu'un écrit QuIt ou QUIT cela fonctionnera toujours).

while True:
    age = input("Quel est votre âge?\nEntrez 'quit' pour sortir: ")
    try:
        age = int(age)
        if age < 3:
            print("Votre billet est gratuit.")
        elif 3 <= age <=12:
            print("Votre billet coûte 10$.")
        elif 12 < age:
            print("Votre billet coûte 15$.")
        else:
            print("Veuillez entrer un âge valide.")
    except ValueError:
        if age.lower() == 'quit':
            break

0voto

funk Points 24

Comme proposé dans un commentaire ci-dessus, vous devriez utiliser raw_input() à la place de input afin de gérer l'entrée de l'utilisateur en tant que chaîne de caractères pour pouvoir vérifier la chaîne 'quit'. Si l'entrée de l'utilisateur n'est pas égale à 'quit', vous pouvez essayer de gérer la chaîne d'entrée comme des nombres entiers. Dans le cas où l'utilisateur passe une chaîne invalide (par exemple, quelque chose comme 'hgkjhfdjghd'), vous pouvez le gérer comme une exception.

Vous trouverez ci-dessous un morceau de code qui montre ce que j'ai décrit ci-dessus :

prompt = "Quel est votre âge ?"
prompt += "\nEntrez 'quit' pour quitter : "

while True:
    age = raw_input(prompt)

    if age == 'quit':
        break

    try:
        age = int(age)  

        if age < 3:
            print("Votre billet est gratuit.")
        elif 3 <= age <=12:
            print("Votre billet coûte 10$.")
        elif 12 < age:
            print("Votre billet coûte 15$.")

    except Exception as e:
        print 'ERREUR:', e
        print("Veuillez entrer un âge valide.")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X