Créer une boucle pour une erreur.

Résolu/Fermé
Continuum Messages postés 50 Date d'inscription jeudi 29 novembre 2012 Statut Membre Dernière intervention 29 novembre 2014 - Modifié par Continuum le 25/05/2013 à 12:00
Continuum Messages postés 50 Date d'inscription jeudi 29 novembre 2012 Statut Membre Dernière intervention 29 novembre 2014 - 28 mai 2013 à 18:13
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 994 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 28 mai 2019 188
26 mai 2013 à 09:32
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 jeudi 29 novembre 2012 Statut Membre Dernière intervention 29 novembre 2014 1
Modifié par Continuum le 27/05/2013 à 20:36
Effectivement la solution est plus simple que ce que je pensais ><
Merci ;)
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 129
Modifié par heyquem le 28/05/2013 à 01:02
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 mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 129
26 mai 2013 à 22:55
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 jeudi 29 novembre 2012 Statut Membre Dernière intervention 29 novembre 2014 1
27 mai 2013 à 20:06
c'est un tantinet plus compliqué que la méthode de tuxboy mais merci ^^
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 129
28 mai 2013 à 00:58
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 jeudi 29 novembre 2012 Statut Membre Dernière intervention 29 novembre 2014 1
28 mai 2013 à 18:13
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