IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Gestion d'erreur dans une boucle while


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    Par défaut Gestion d'erreur dans une boucle while
    Bonjour,

    j'ai fait le code simpliste suivant qui permet de trouver un nombre au hasard mais j'ai un petit souci au niveau de la gestion des erreurs notamment lorsque l'on saisit un nombre négatif. Losque l'utilisateur saisi une première fois un nombre négatif, il y a bien le message d'erreur qui s'affiche en lui demandant de choisir un nombre entre 1 et 49.
    Mais s'il en saisi un autre de suite après, ce message d'erreur ne s'affiche plus et le programme se poursuit comme si de rien n'était. Je me doute qu'il faut repartir au début de la boucle while mais je ne sais pas comment faire vu que la commande iterate ne fonctionne pas avec while... D'un autre côté si vous trouvez que mon code est améliorable, n'hésitez pas à me faire des remarques
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    nbrsecret = random.randrange(1, 49) # cherche un nomble aléatoire entre 1 et 49
     
    def nbr():
        global reponse
        reponse = int(input("quel est le nombre secret entre 1 et 49. Tapez 0 si vous souhaitez arrêter\n"))
        return reponse
     
    i = 1
     
     
    nbr()
     
    while True:
        if reponse > 49:
           print("Vous devez choisir un nombre entre 1 et 49 ! Recommencez.")
           nbr()
        if reponse < 0:
           print("Vous devez choisir un nombre entre 1 et 49 ! Recommencez.")
           nbr()
        if i > 4:
           print("Vous avez effectué 5 tentatives. Vous avez perdu!!! Le nombre secret était",nbrsecret)
           break
        if reponse == 0:
            print("Vous abandonnez déjà!!! Comme c'est dommage. Le nombre secret était",nbrsecret," A bientôt")
            break
        if reponse == nbrsecret:
            print("Bravo!!!Vous avez réussi au bout de",i,"tentatives")
            break
        if reponse < nbrsecret:
            print("c'est plus!")
            i = i + 1
            nbr()
        else:
            print("c'est moins!")
            i = i + 1
            nbr()
     
     
     
    input("")

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Voici un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def ask_value(mini:int, maxi:int) -> int:
        n = int(input(f"Entrer une valeur entre {mini} et {maxi}: "))
        if mini <= n <= maxi:
            return n
        return ask_value(mini, maxi)
     
    value = ask_value(1, 49)
    print(value)
    EDIT: Tant qu'à faire en 3.6, autant tout faire...

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Essayez de supprimer la variable globale réponse!
    Ecrire nbr() qui retourne un nombre est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nbr():
        reponse = int(input("quel est le nombre secret entre 1 et 49. Tapez 0 si vous souhaitez arrêter\n"))
        return reponse
    Puis réfléchissez à votre boucle while on demande un nombre à l'utilisateur, on fait un tas de tests *et* on recommence avec la demande d'un autre nombre.
    Dans votre cas, ça demande un nouveau nombre à plein d'endroits, comment voulez vous savoir où vous en êtes?
    note: à côté de "break" qui force la sortie du while, vous avez "continue" qui passe à l'itération suivantes sans exécuter les instructions qui suivent. Cà permet de limiter les emboîtement de if..else...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    Par défaut
    Salut wiztricks. C'est effectivement la commande continue qu'il me manquait.
    Du coup, maintenant ça fonctionne.
    Mais par contre quand je retire
    le programme plante en me disant reponse not defined. D coup je l'ai remis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    import random
     
    # programme de loto
     
    nbrsecret = random.randrange(1, 49) # cherche un nomble aléatoire entre 1 et 49
     
    def nbr():
        global reponse
        reponse = int(input("quel est le nombre secret entre 1 et 49. Tapez 0 si vous souhaitez arrêter\n"))
        return reponse
     
    i = 1
     
    prenom = input("quel est votre prénom ?")
     
    nbr()
     
    while True:
        if prenom == 'samir':
            print("vous avez gagné!!! Vous êtes vraiment le meilleur!!")
            break
        if reponse > 49:
           print("Vous devez choisir un nombre entre 1 et 49 ! Recommencez.")
           nbr()
           continue
        if reponse < 0:
           print("Vous devez choisir un nombre entre 1 et 49 ! Recommencez.")
           nbr()
           continue
        if i > 4:
           print("Vous avez effectué 5 tentatives. Vous avez perdu!!! Le nombre secret était",nbrsecret)
           break
        if reponse == 0:
            print("Vous abandonnez déjà!!! Comme c'est dommage. Le nombre secret était",nbrsecret," A bientôt")
            break
        if reponse == nbrsecret:
            print("Bravo!!!Vous avez réussi au bout de",i,"tentatives")
            break
        if reponse < nbrsecret:
            print("c'est plus!")
            i = i + 1
            nbr()
        else:
            print("c'est moins!")
            i = i + 1
            nbr()
     
     
     
    input("")

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Si la fonction nbr retourne une valeur, il faut l'assigner à réponse via reponse = nbr(). Du coup, plus besoin de global.

    - W

    -
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 931
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 931
    Par défaut
    Ha d’accord. Je comprends mieux. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] VBA : Gestion d'erreurs dans une boucle For
    Par Astreziel dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/07/2016, 10h34
  2. gestion des erreurs dans une boucle
    Par shimomura22 dans le forum C#
    Réponses: 4
    Dernier message: 17/04/2015, 09h51
  3. Gestion d'erreur dans une boucle
    Par frto0 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/10/2010, 10h06
  4. [MySQL] Erreur dans une boucle while
    Par nox77 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/06/2010, 10h54
  5. Gestion des erreurs dans une boucle While
    Par Gregory.M dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2008, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo