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 :

Fonction booléenne qui ne s'évalue pas correctement


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Fonction booléenne qui ne s'évalue pas correctement
    Bonjour à tous,

    Je suis nouvelle sur ce forum et sur python de manière générale, donc désolée d'avance si mes questions vous paraissent bêtes.
    Pour le contexte : Je dois définir une fonction vert qui retourne True si son argument = 'vert', et une autre fonction orange qui retourne True si son argument = 'orange', jusque là pas de soucis. Mais après, je dois définir une fonction roule qui retourne True si vert ou orange sont True, False sinon. Mon problème est le suivant : lorsque je définis ma fonction, le résultat est toujours True quel que soit l'état de vert ou orange, et je ne comprends pas pourquoi. A quel moment exactement de l'exécution de roule les fonctions vert et orange sont évaluées ?

    Voici ce que j'ai écrit (je l'ai fait de plusieurs manières mais toujours le même résultat) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def roule(x) :
    ...     def vert(a) :
    ...             if a is 'vert' : return True
    ...             return False
    ...     def orange(b) :
    ...             if b is 'orange' : return True
    ...             return False
    ...     if vert or orange : return True
    ...     return False
    Merci d'avance à ceux qui voudront bien me répondre !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Izalith Voir le message
    A quel moment exactement de l'exécution de roule les fonctions vert et orange sont évaluées ?
    Lorsque Python exécute l'instruction if vert or orange : return True, il va trouver les variables "vert" et "orange" associées aux fonctions que vous avez défini... et il y a une subtile différence entre variable associée à une fonction et appel de la fonction.
    Après, vous pouvez appliquer "bool":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def f(): pass
    ...
    >>> bool(f)
    True
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci pour votre réponse. En effet, la différence entre variable associée à une fonction et appel de la fonction en question est subtile, mais dans ce cas, comment y faire appel à l'intérieur de ma fonction roule ?

    J'ai essayé bool(vert) à un moment ou vert était False, et le résultat retourné était encore et toujours True... Je pense que j'ai mal compris votre réponse. Pourriez-vous m'éclairer davantage?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Izalith Voir le message
    Merci pour votre réponse. En effet, la différence entre variable associée à une fonction et appel de la fonction en question est subtile, mais dans ce cas, comment y faire appel à l'intérieur de ma fonction roule ?
    Tout est dans la présence ou non de (...) après la variable...
    La lecture d'un tuto. sur les fonctions serait peut être indiquée - il est étrange d'écrire une fonction sans savoir l'utiliser ou de ne pas avoir la curiosité de lancer la console Python, pour bavarder avec l’interpréteur et essayer de comprendre ce qu'il se passe lorsqu'on lui demande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> def foo(): print('hello from foo')
    ...
    >>> foo()
    hello from foo
    >>> foo
    <function foo at 0x00000000004ACB70>
    >>> bool(foo)
    True
    >>> bool(foo())
    hello from foo
    False
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 055
    Points : 9 394
    Points
    9 394
    Par défaut
    J'aurais formulé cela différemment.
    Tu as une fonction roule(), qui utilise une variable x.
    Si tu avais mis un COMMENTAIRE en tête de cette fonction, tu aurais écrit : Selon la valeur de x, cette fonction renvoie Vrai ou Faux.
    Et ce qui t'aurait alerté, c'est qu'à aucun moment, tu n'utilises ce x dans le code de la fonction roule()
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

Discussions similaires

  1. une fonction qui ne s'execute pas correctement
    Par chmek firas dans le forum Débuter
    Réponses: 4
    Dernier message: 14/05/2012, 22h26
  2. Fonction Javascript qui ne s'exécute pas
    Par bubuche007 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 25/01/2007, 11h17
  3. Fonction recursive qui ne back track pas
    Par cels dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/12/2006, 09h26
  4. Réponses: 1
    Dernier message: 21/11/2006, 16h53
  5. [MS SERVER 2K]Fonction crée qui ne s'éxécute pas
    Par Filippo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2006, 12h03

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