Créer une boucle pour une erreur. [Résolu/Fermé]

Signaler
Messages postés
50
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
29 novembre 2014
-
Messages postés
50
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
29 novembre 2014
-
Bonjour,
Débutant en Python, je souhaiterais pourvoir créer une boucle lorsque le programme détecte une erreur précise, je ne sais pas si je suis clair donc voici un exemple:

mise=input("Saisissez votre mise")
try:
  mise=int(mise)
except ValueError:
  mise =input("Incorrect, Veuillez réésayer")
print (mise)


Par exemple dans ce cas si l'utilisateur entre des lettres dans "mise" le programme lui demande de réessayer, mais si l'utilisateur rentre à nouveau des lettres (admettons qu'il soit bouché ^^), le programme se contente d'afficher "mise" et ferme, ce que je voudrais c'est que tant qu'il n'a pas entré de valeur correcte, c'est à dire ici des chiffres, le programme lui demande de recommencer.
C'est certainement possible par des moyens détournés avec des "while" ou des "for", j'ai notamment essayé de créer une boucle en stockant l'erreur dans une variable avec "as", mais ça complique nettement le problème.

Je n'ai pas trouvé le mot clé miracle malgré mes recherche sur le net, merci d'avance de votre aide!

2 réponses

Messages postés
994
Date d'inscription
lundi 23 juillet 2012
Statut
Membre
Dernière intervention
28 mai 2019
156
Tu as essayé d'insister ?

insiste = False
while not insiste:
    try:
      mise=int(input("Saisissez votre mise : "))
      insiste = True
    except ValueError:
      print ("Incorrect, Veuillez réésayer. ")
      insiste = False
print (mise)
Messages postés
50
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
29 novembre 2014
1
Effectivement la solution est plus simple que ce que je pensais ><
Merci ;)
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
120
Ce serait plus logique que ce soit:

insiste = True
while insiste:
    try:
      mise=int(input("Saisissez votre mise : "))
      insiste = False
    except ValueError:
      print ("Incorrect, Veuillez réésayer. ")
print (mise)

Noter que ça ne sert à rien de redonner à insiste la valeur que ça a déjà dans le cas où on rentre dans la section "except"

On s'azperçoit aussi que insiste = False peut bien se remplacer par break et qu'on n'a pas besoin de l'objet isniste.
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
120
from sys import exit

mess = "Saisissez votre mise "
while True:
    mise=raw_input(mess)
    if mise.isdigit():
        mise = int(mise)
        break
    elif mess=="Saisissez votre mise ":
        mess = "Saisissez un entier pour votre mise "
    elif mess=="Saisissez un entier pour votre mise ":
        mess = "Vous etes bouché ? Dernier essai"
    elif mess=="Vous etes bouché ? Dernier essai":
        exit()
        
print '---------\nmise == %d' % mise
Messages postés
50
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
29 novembre 2014
1
c'est un tantinet plus compliqué que la méthode de tuxboy mais merci ^^
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
120
C'est à dire que tu as dit que tu voulais que si l'utilisateur se trompe, le programme ferme. Ce que ne fait pas le programme de tuxboy.
Messages postés
50
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
29 novembre 2014
1
Non, moi ce que je voulais c'est justement que le programme ne ferme pas quand l'utilisateur se trompe, et continue de lui demander une valeur correcte tant qu'il n'en a pas entré une.