Créer une boucle pour une erreur.

Résolu
Continuum Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -  
Continuum Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -
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

tuxboy Messages postés 995 Date d'inscription   Statut Membre Dernière intervention   190
 
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)
0
Continuum Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   1
 
Effectivement la solution est plus simple que ce que je pensais ><
Merci ;)
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
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.
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
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
0
Continuum Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   1
 
c'est un tantinet plus compliqué que la méthode de tuxboy mais merci ^^
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
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.
0
Continuum Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   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.
0