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 :

Utilisation simple de "or" [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Points : 61
    Points
    61
    Par défaut Utilisation simple de "or"
    Bonjour à tous,

    J'aimerais savoir comment utiliser l'instruction "or" correctement.

    J'ai tout simplement une liste que j'ai nommé A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if A[0]==1:
        print("Je suis sur la première case")
    elif(A[10]or A[30])==1:
        print("Je suis soit sur la case 10 soit sur la case 30")
    else:
        print("Je suis sur une case différente de 0, 10 ou 30")
    J'ai cherché dans l'aide de python et j'ai lu que "or" n'étais pas vraiment le "ou" auquel on pense simplement, mais je ne sait pas comment utiliser "or" dans mon exemple pour que cela fonctionne.

    Merci de votre aide

  2. #2
    Membre éprouvé
    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
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par Leododo Voir le message
    J'aimerais savoir comment utiliser l'instruction "or" correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if A[0]==1:
        print("Je suis sur la première case")
    elif(A[10]or A[30])==1:
        print("Je suis soit sur la case 10 soit sur la case 30")
    else:
        print("Je suis sur une case différente de 0, 10 ou 30")
    J'ai cherché dans l'aide de python et j'ai lu que "or" n'étais pas vraiment le "ou" auquel on pense simplement, mais je ne sait pas comment utiliser "or" dans mon exemple pour que cela fonctionne.
    Bonjour,
    Je ne comprends pas le problème: chez moi cela "fonctionne" (du moins de ce que j'ai compris et interpolé du problème).
    La seule chose particulière est le "or" entre deux valeurs. Tant qu'il n'y a que des 1…
    C'est pour cela qu'il semblerait plus logique d'écrire:
    (A[10] == 1) or (A[30] == 1)

    Il n'y a rien de particulier; tout est noté dans librairie standard:

    4.2. Boolean Operations — and, or, not

    These are the Boolean operations, ordered by ascending priority:
    Operation Result Notes
    x or y if x is false, then y, else x (1)
    x and y if x is false, then x, else y (2)
    not x if x is false, then True, else False (3)

    Notes:

    This is a short-circuit operator, so it only evaluates the second argument if the first one is False.
    This is a short-circuit operator, so it only evaluates the second argument if the first one is True.
    not has a lower priority than non-Boolean operators, so not a == b is interpreted as not (a == b), and a == not b is a syntax error.
    Clodion
    PS: bien lire les 3 notes, elles sont primordiales!
    (Bien sûr en gardant à l'esprit que pour Python, tout ce qui n'est pas 0, ""… est considéré comme Vrai!)

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Devant ce type de question, on ouvre un terminal et on teste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >>> a = 2
    >>> b = 5
    >>> a or b
    2
    >>> a == 4 or b
    5
    >>> a == 4 or b == 6
    False
    >>> a == 4 or b == 5
    True
    >>> a or b == 7
    2
    >>>

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    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 : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    (Bien sûr en gardant à l'esprit que pour Python, tout ce qui n'est pas 0, ""… est considéré comme Vrai!)
    Je ne suis pas d'accord avec cette affirmation...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> 3 == True
    False
    >>> 'coucou' == True
    False
    >>> [1, 2, 3] == True
    False
    EDIT: Pour le PO, le or se différencie très peu des autres langages, il y a une règle générale:

    Le résultat est vrai lorsqu'on a une des deux expressions qui est vrai !
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre éprouvé
    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
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Je ne suis pas d'accord avec cette affirmation...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> 3 == True
    False
    >>> 'coucou' == True
    False
    >>> [1, 2, 3] == True
    False
    EDIT: Pour le PO, le or se différencie très peu des autres langages, il y a une règle générale:

    Le résultat est vrai lorsqu'on a une des deux expressions qui est vrai !
    Bonjour,
    Je maintiens et signe! ;-)
    (Bien sûr en gardant à l'esprit que pour Python, tout ce qui n'est pas 0, ""… est considéré comme Vrai!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> if 3: print(3)
     
    3
    >>> if "coucou": print("coucou")
     
    coucou
    >>> if [1, 2, 3]: print("Ok")
     
    Ok
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> if 0: print(0)
     
    >>> if "": print("chaine vide")
     
    >>> if []: print("lst")
     
    >>>
    Clodion

    PS: Et bien sûr, tout à fait d'accord avec VinsS: tester c'est le mieux!

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    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 : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    C'est cette expression:
    tout ce qui n'est pas 0, ""…
    qui est mal dites et porte à confusion.

    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Clodion Voir le message
    (Bien sûr en gardant à l'esprit que pour Python, tout ce qui n'est pas 0, ""… est considéré comme Vrai!)
    Citation Envoyé par Clodion Voir le message
    Je maintiens et signe! ;-)
    Bonjour

    Il faut être tout de même être très très très prudent en estimant ce qui sera vrai ou faux par défaut.
    J'avais un code où j'avais écrit des trucs style var=truc if truc is not None else chose. J'ai un jour trouvé malin de remplacer par var=truc or chose, pensant que soit truc serait à None et le test serait faux remplissant alors "var" avec "chose", soit il ne le serait pas et le test serait vrai mettant alors ledit "truc" dans "var". Or, quand truc s'est trouvé un jour être "" et que je n'avais pas prévu que ce serait considéré comme faux et que je me suis trouvé avec var=chose, j'ai été dedans bien jusqu'au cou.

    Donc vaut quand-même mieux tester explicitement ce qu'on cherche...
    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 éprouvé
    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
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Il faut être tout de même être très très très prudent en estimant ce qui sera vrai ou faux par défaut.
    J'avais un code où j'avais écrit des trucs style var=truc if truc is not None else chose. J'ai un jour trouvé malin de remplacer par var=truc or chose, pensant que soit truc serait à None et le test serait faux remplissant alors "var" avec "chose", soit il ne le serait pas et le test serait vrai mettant alors ledit "truc" dans "var". Or, quand truc s'est trouvé un jour être "" et que je n'avais pas prévu que ce serait considéré comme faux et que je me suis trouvé avec var=chose, j'ai été dedans bien jusqu'au cou.

    Donc vaut quand-même mieux tester explicitement ce qu'on cherche...
    Bonsoir,
    Tout à fait!!!
    C'est bien pour cela que je préconisais les tests séparés (if (a==b) or (c==d))…
    Ainsi que les conseils de VinsS: tester dans la console, faire des essais ; cela permet d'éviter des tonnes de pièges!!

    Clodion

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Points : 61
    Points
    61
    Par défaut
    Merci à tous pour vos réponses :-)
    J'ai fais des tests sur la console et j'ai résolu mon problème en séparant mes instructions
    Merci encore et bonne journée

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

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