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 :

Problème sur condition


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut Problème sur condition
    Bonjour,

    je débute dans Python, alors voici ma question qui vous semblera sûrement simple :

    Cette condition fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    varNom = input("quel est votre nom ?")
    if len(varNom)>3:
        print("Nom trop grand")
    else:
        print("ok")
    alors que celle-ci me renvoi "ok" même si je dépasse les 3 caractères autorisés et je ne comprend pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    varNom2 = input("quel est votre nom ?")
    try:
        len(varNom2)>3
    except:
        print("Nom trop grand")
    print("ok")
    surtout que celle-ci qui est presque la même fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    annee = input("quelle année ?")
    try:
        annee = int(annee)
    except:
        print("Erreur de conversion")
    print("ok")

    Si vous pouviez m'aider ?

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    La ligne 3 du deuxième code me dérange : c'est un test ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut
    Bonjour, Oui c'est mon test pour savoir si le nombre de caractères dépasse 3 dans ce cas : erreur, mais le code du 2ème me répond "ok"

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Bonjour,

    En fait je crois que le concept du try, except, else n'est pas tout à fait compris

    Dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    varNom2 = input("quel est votre nom ?")
    try:
        len(varNom2)>3
    except:
        print("Nom trop grand")
    print("ok")
    Tu n'entres pas dans le "except" car python ne génère pas d'erreur....Tu passes donc à la suite de ton code...

    Je te montre un exemple ou l'on entre dans l'except :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    varNom2 = input("quel est votre nom ?")
    try:
        if len(varNom2)>3:
            raise Exception #On lève une exception pour l'exemple
    except:
        print("Nom trop grand")
    else:
        print("ok")
    Tu oublies aussi le "Else" ou va s'éxécuter le code si la condition du "try" n'est pas respectée et qu'elle ne lève pas d'erreur

    Pour ton exemple avec les années, en fait python va en effet te générer une erreur si tu entres une "string" à la place d'un "int", d'où l'affichage de ton "except", tu suis toujours ?

    D'ailleurs le code pour tes années si tu veux en savoir un peu plus, essayes donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # -*- coding: cp1252 -*-
    annee = input("quelle année ?")
    try:
        annee = int(annee)
    except Exception as e:
        print("Erreur de conversion")
        #On regarde les erreurs générées par python
        print type(e)
        print e.__doc__
        print e.message
    else:    
        print("ok")
    Voilà voilà

  5. #5
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    varNom2 = input("quel est votre nom ?")
    try:
        len(varNom2)>3
    except:
        print("Nom trop grand")
    print("ok")
    tout simplement try exept c'est dire à python essaye le block try , si tu retourne une exception alors oublie le block try et exécute le block exceptet la ou ca coince c'est que len(varNom2)>3 retourne un booléen ( True ou False) là ou les conditions fonctionne avec des booléens les try except n'en on rien à faire qu'on leurs retournes des booléens.

    donc try ne vérifie pas si oui ou non varNom2 est supérieur à 3, mais vérifie si oui ou non c'est une instruction valide.

    par exemple 1 + "A" renvoie cette exception : TypeError: unsupported operand type(s) for +: 'int' and 'str'le programme plante, si c'est dans un try except genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try:
        1 + "A"
        print("try ok, exept ne s'exécute pas")
    exept:
        print("try non ok, exécution du exept")
    le programme ne plante pas... bon bien sur ici y'a aucune chance pour que un jour le block try marche hein ^^

    les try except sont l'arme ultime pour faire quelque chose qui ne dépend pas que de python:

    - un utilisateur rentre quelque chose avec input, c'est forcement une chaine de caractère que tu récupère, il te faut un int, vérifie que int() est bien capable de convertir la chaine de caractère en int.
    - python doit lire un fichier, c'est pas sur que le fichier soit là, c'est pas sur que python est les droits pour le lire.
    - tu souhaite accédé à quelque chose sur internet, peut être t'a pas internet, peut être que le site est HS.
    -ect ...

    en gros pour chaque ligne dis toi qu'est ce qui peut mal se passer, si sa peut mal se passer alors try except

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut assertion
    En complément, pour ce genre de chose, on utilise une assertion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nom = 'jojo le démago'
    try :
        assert len(nom) <= 3
    except AssertionError :
        print('troooooppppppppppp lonnnnnnnnnnnnnnngggggggggggggggggggg')
    Mais est-ce réellement utile dans ton cas ? Puisque le but final est de normalement demander le nom jusqu'à ce qu'il soit bon.
    Et ce genre de chose, on le fait généralement avec une boucle ou une fonction récursive.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def demanderNom() :
        message = 'Votre nom ? : '
        while True :
            nom = input(message)
            if len(nom) > 3 :
                message = 'Votre nom est trop long, 3 car. max, votre nom ? : '
            else :
                break
        return nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def demanderNom(message='Votre nom ? : ') :
        nom = input(message)
        if len(nom) > 3 :
            return demanderNom('Votre nom est trop long, 3 car. max, votre nom ? : ')
        return nom

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 821
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bistouille Voir le message
    ...ou une fonction récursive.
    Bonjour

    T'es sérieux là ? Tu vas invoquer la récursivité (avec toute sa lourdeur) pour juste ça ???

    Citation Envoyé par bistouille Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def demanderNom() :
        message = 'Votre nom ? : '
        while True :
            nom = input(message)
            if len(nom) > 3 :
                message = 'Votre nom est trop long, 3 car. max, votre nom ? : '
            else :
                break
        return nom
    Même ce code ne me plait pas trop (ce "else: break" qui arrive comme un cheveu dans la soupe). Perso j'aime bien détecter au préalable tout ce qui peut arriver de spécial. Et en final, alors faire le traitement du cas non prévu
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def demanderNom() :
        message = 'Votre nom ? : '
        while True :
            nom = input(message)
            if len(nom) <= 3 : break
            message = 'Votre nom est trop long, 3 car. max, votre nom ? : '
        # while
        return nom
    # demanderNom()

    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut
    Bonjour,

    Merci Fawn_noOb, j'ai bien compris tes explications et je comprends donc pourquoi python ne voyait pas l'erreur.
    Merci aussi à Sve@r, bistouille et flapili pour votre temps et vos explications.

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

Discussions similaires

  1. problème sur condition (if / elseif / else)
    Par flavors dans le forum Langage
    Réponses: 13
    Dernier message: 06/01/2016, 14h29
  2. Problème sur condition IF
    Par asty69 dans le forum Débutez
    Réponses: 6
    Dernier message: 30/05/2011, 13h38
  3. Problème sur condition 'if '
    Par chrystobale dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 19/03/2009, 16h32
  4. problème sur une condition if
    Par boss_gama dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/07/2006, 12h04
  5. Réponses: 4
    Dernier message: 13/02/2006, 11h13

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