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 :

indentation et expression booléenne


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Par défaut indentation et expression booléenne
    Bonjour,

    je n'ai pas saisi le principe d'indentation (genre laisser un espace avant 'if') et d'évaluation des expressions booléennes (et la fonction eval()) :

    _le prédicat d'égalité, l'opérateur == veut dire que l'on est sure de la vérité de l'expression , mais l'opérateur = est t-il dans un sens pareil ?

    _L'opérateur 'is' pourrait remplacer l'opérateur' =' ?

    _l'affaire se corse avec les prédicats complexes , voici mon écriture des scripts : l'expression de 'if' doit étre vraie

    x or y veut dire : >>> if x is 'faux' : return eval(y) # Que veut dire eval(y) , çà voudrait que x = y ?

    ... else : return eval(x) # else désigne le contraire de if , eval(x) = x ?

    Mais on peut mettre que x est Vrai , pourquoi le tableau du cours parle juste que x est faux :

    >>> if x is 'True' : return eval(x)

    >>>...else : return eval(y)



    _ doit t-on évaluer la vérité de l'expression x or y avec la fonction bool()? bool(x or y)



    _l'exemple : (not 3) is (not 2) , on fera bool((not 3)) et bool((not 2)).On peut aussi utiliser la fonction int () ?

    Le résultat est False is False ,donc 0 is 0 . Les parenthèses () ont un effet d'abstraction.

    _ x and y , par exemple : 1 et 2 font 3 , çà voudrait dire 1 + 2 = 3 ?

    _l'exemple 'xy'[0] is 'z' or 'z' , on considère en premier bool('z' or 'z') ou bool('xy'[0]) ??? (j'ai fait les essaies c'est juste pour voir ce l'ordre logique à avoir)

    _if 5 > 4 : feu = 'rouge' # toujours évalué là j'ai compris que feu = 'rouge'

    Mais là j'ai raté un épisode : doit t-on faire tout à la suite de l'autre ? et appuyer sur enter ?

    if feu is 'vert' : passe = True # est-ce que préalablement on met feu is 'vert' ? et le passe d'où il vient Surpris ?

    else : passe = False # là c'est la négation .



    et là :

    >>> if passe and feu is 'rouge' : passe = not passe # passe = False ? et y = feu is 'rouge' est Vrai .donc 0 + 1 = 1 ?


    J'ai testé avec python mais j'aimerais comprendre vraiment le sens de ce que je fais ,et aussi comprendre un peu la machine et son interprétation

  2. #2
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Bonjour,

    Citation Envoyé par jumangi Voir le message
    le prédicat d'égalité, l'opérateur == veut dire que l'on est sure de la vérité de l'expression , mais l'opérateur = est t-il dans un sens pareil ?
    Pas tout à fait! "a==b" est une expression qui renvoie vraie si les deux objets sont identiques (ou si Python peut déterminer qu'ils sont identiques).
    "a=b" n'a rien à voir!! Il signifie simplement "b" est attribué à "a". Oui?

    Citation Envoyé par jumangi Voir le message
    L'opérateur 'is' pourrait remplacer l'opérateur' ='
    Ho non!! is ne teste pas une égalité, mais une appartenance à un groupe!!

    "if x or y:" signifie simplement en français: si x est ou bien si y est vrai!
    Ici, la condition x est évaluée en premier. Si elle est vraie alors la condition y n'est d'aucune utilité (puisqu'alors x or y est "déjà" vraie). Par contre, si la condition x est fausse alors la condition y est évaluée!
    Oui?

    En Python, tout ce qui est 0, False ou vide est considéré comme False: tout le reste est considéré comme True!!!!!

    "not a": a est une condition!!! Si a (ou son résultat vaut 0, est vide ou False) alors "not a" vaudra True!!! Et l'inverse est aussi valable!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> (not 3) is (not 2)
    True
    >>> False is False
    True
    >>>
    La fonction "bool(x)" renvoie la véracité de l'expression "x". Si "x" est nul, vide ou False alors "bool(x)" retourne "False"…

    Pour toutes ces choses, je vous conseille de prendre un shell Python et de faire de nombreux essais afin de mieux saisir les notions!!! :-)

    Clodion

    PS: l'indentation en Python est vraiment très simple à comprendre!!!
    Les instructions qui se suivent ont la même indentation exactement (quelle que soit la première indentation, toutes les autres indentations sont identiques)!!!
    Certaines expressions Python exigent une indentation dans leurs structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if x:
        print("x est non nul, ou non vide ou True")
    else:
        print("x est nul, vide ou False")
    Cela permet à Python de déterminer à quelle ligne se termine la structure (ici du "if" ainsi que du "else").
    Rajouter une instruction après le premier print:
    ->avec la même indentation: Python considère que l'instruction fait partie du if (ie: elle n'est évaluée que si la condition x est évaluée à True)
    ->sans indentation: Python considère que l'instruction (et la suite) n'est plus dépendant du if (et qu'elle est donc évaluée indépendamment de la condition x).

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Par défaut
    Merci beaucoup pour ton aide précieuse

    donc
    x and y : >>>if x is 'True' and y is 'False' : return True
    ...else : return False

    >>>if x is 'False' and y is 'True' : return True
    ...else : return False
    >>>if x is 'False' and y is 'False': return False
    ...else : return True

    x or y : >>>if x or y is 'False' : return True # on voit l'expression x or y ?


    True devient True , False devient True , et else fait tout basculer ?

  4. #4
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par jumangi Voir le message
    x and y : >>>if x is 'True' and y is 'False' : return True
    ...else : return False
    Bonjour,
    Ho non!!!
    Il est facile de trouver des tables de vérité concernant ces opérateurs:
    si x est vrai et y est vrai alors x and y est vrai!
    (Il faut essayer dans le shell Python!!)
    C'est exactement comme en français!!
    si j'ai 1€ [x] et si le gâteau vaut 1€ [y] alors je peux acheter le gâteau!!!
    si x et y alors oui sinon non!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> x=True
    >>> y=True
    >>> if x and y:
    	print("Oui")
     
     
    Oui
    >>>
    Par contre:
    Un gâteau vaut 1€:
    si j'ai 1€ ou si la marchande me fait cadeau du gâteau alors je peux manger le gâteau!!
    Ici, comme en français…
    Si j'ai 1€ je peux manger le gâteau (même si la marchande ne me fait pas de cadeau).
    Si je n'ai pas 1€ mais que la marchande me donne le gâteau alors je peux quand même manger le gâteau (et pourtant, au départ, je n'avais pas 1€!!). Et si j'ai 1€ mais que la marchande me fait cadeau du gâteau alors je peux aussi manger le gâteau!!
    Oui??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> x=True
    >>> y=False
    >>> if x or y:
    	print("Oui")
    Oui
    Mais ce n'est plus un "and", c'est un "or":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> x=True
    >>> y=False
    >>> if x and y:
    	print("Oui")
     
     
    >>>
    Oui???
    Avec "or": il suffit que l'une des deux expression soit vraie pour que "x or y" soit vraie
    Avec "and": il faut que les deux expressions soient vraies pour que "x and y" soit vraie!

    Les renseignements sont disponibles sur Wikipedia: paragraphes Conjonction et Disjonction (convention: 0 pour faux et 1 pour vrai)!!

    S'il y a besoin d'autres précisions, n'hésitez pas à questionner!

    Clodion

    PS: n'hésitez pas à tester dans un shell en attribuant à x et y des valeurs True et False!!!
    Python vous répondra!! :-)

  5. #5
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    Merci clodion , du coup même moi , je viens de comprendre certaines subtilités .

Discussions similaires

  1. Transformation d'expression booléenne
    Par bitou dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 21/05/2007, 18h17
  2. Réponses: 13
    Dernier message: 08/05/2007, 09h22
  3. Chaîne => expression booléenne
    Par whyle62 dans le forum Langage
    Réponses: 3
    Dernier message: 28/04/2007, 16h27
  4. Analyseur Syntaxique Expression Booléenne
    Par Invité dans le forum Langage
    Réponses: 8
    Dernier message: 01/10/2006, 10h57
  5. [XSLT] Expression booléenne en tableau
    Par brunoz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/02/2006, 10h22

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