Une très bête question "and" comme "or"? - Python - Programmation
Marsh Posté le 08-09-2015 à 22:56:57
Ca serait pas une question de priorité des opérateurs du genre :
if (x in z) and (y in z)
if (x) and (y in z)
Marsh Posté le 09-09-2015 à 11:02:40
rufo a écrit : Ca serait pas une question de priorité des opérateurs du genre : |
Correct. La première expression vérifie que x est dans z et y est dans z, la seconde vérifie que x (est "truthy" ), et que y est dans z (mais pas que x est dans z).
Nota bene: (x and y) in z ne va pas non plus vérifier que `x in z and y in z`, c'est pas comme ça que ça marche (si `x` est truthy ça va vérifier que `x in z`, sinon ça va vérifier que `y in z`, mais jamais les deux)
Marsh Posté le 09-09-2015 à 22:24:24
La première expression "if X in Z and Y in Z" est une expression booléenne.
Dans un monde, où la deuxième expression "if X and Y in Z" serait équivalente à la première expression, il s'agirait de la représentation d'une expression ensembliste.
Les opérateurs or et and sont opérateurs booléens, on ne peut pas les utiliser comme des opérateurs ensemblistes. Et donc la deuxième expression se comporte comme une expression booléenne. (Les posts ci-dessus expliquent très bien comment est interprété cette expression donc je ne vais pas revenir dessus.)
Pour écrire des expressions ensemblistes, il faudrait que le langage puisse utiliser des opérateurs ensemblistes qui serait probablement nommé union et intersect ce qui donnerait probablement un truc du genre "if (X union Y) in Z". Ou que le langage soit capable : soit de distinguer à la volée les 2 types d'expressions pour y appliquer les bons opérateurs, soit d'avoir des marqueurs implictes à cet usage du genre "ifensemblist X and Y in Z".
in est un opérateur ensembliste, il s'agit d'un include.
edit: apparemment, python a une syntaxe ensembliste : https://docs.python.org/2/library/stdtypes.html#set
Et donc il suffit d'utiliser union (|) à la place de and et utiliser issuperset pour vérifier si l'ensemble complet est inclus dans l'autre.
Un truc du genre "if (x|y).issuperset(z)".
Marsh Posté le 10-09-2015 à 17:26:59
rufo a écrit : Ca serait pas une question de priorité des opérateurs du genre : |
masklinn a écrit : |
czh a écrit : La première expression "if X in Z and Y in Z" est une expression booléenne. |
merci à tous les trois pour ces réponses claires, et mention spéciale à czh pour explication fondamentale :-)
J'ai appris un truc important.
Marsh Posté le 08-09-2015 à 22:08:14
Bonjour,
très bête question, j'ai honte mais je ne comprends pas pourquoi python fait la différence entre
if X in Z and Y in Z
if X and Y in Z
Dasn le premier cas, il va chercher toute les occurences de 'Z' qui remplissent les deux critères (x et y), dans l'autre il va lister toutes les occurences qui contiennet x ou y dans z => le and est interprêté comme un "or"
Moi pas comprendre :-/
merci d'avance
---------------
"La chance de voir une biche" Archlinux :: http://www.archlinux.org/ ::