web-dev-qa-db-fra.com

Comment utiliser boolean 'et' in Python

En C #, nous pouvons utiliser && (booléen et) comme ceci:

int i = 5;
int ii = 10;
if(i == 5 && ii == 10) {
    Console.WriteLine("i is 5, and ii is 10");
}
Console.ReadKey(true);

Mais essayez cela avec Python:

i = 5
ii = 10
if i == 5 && ii == 10:
    print "i is 5 and ii is 10";      

Je reçois une erreur: SyntaxError: invalid syntax

Si j'utilise un seul &, au moins je n’obtiens aucune erreur de syntaxe. Comment faire un booléen && en Python?

41
Python

Essaye ça:

i = 5
ii = 10
if i == 5 and ii == 10:
      print "i is 5 and ii is 10"

Edit: Oh, et vous n’avez pas besoin de ce point-virgule sur la dernière ligne (edit pour le supprimer de mon code).

67
Mizipzor

Comme indiqué, "&" in python effectue une opération bitwise et, tout comme en C #. and est l'équivalent approprié de l'opérateur && .

Puisque nous avons affaire à des booléens (i == 5 Est True et ii == 10 Est aussi True), vous pouvez vous demander pourquoi cela n’a pas fonctionné de toute façon ( Vrai étant traité comme un nombre entier, Vouloir et Vrai étant une valeur Vrai, ou émettre une exception (par exemple, en interdisant les opérations au niveau des bits sur les types booléens)

La raison en est la priorité de l'opérateur. L'opérateur "and" lie plus vaguement que ==, Ainsi l'expression: "i==5 and ii==10" Est équivalente à: "(i==5) and (ii==10)"

Cependant, bitwise & A une priorité supérieure à "==" (Car vous ne voudriez pas que des expressions comme "a & 0xff == ch" Veuillent dire "a & (0xff == ch)" ), l'expression serait donc interprétée comme suit:

if i == (5 & ii) == 10:

Ce qui utilise chaine d'opérateur de python pour signifier: la valeur de ii anded avec 5 est-elle égale à i et 10. Évidemment, cela ne sera jamais vrai.

Vous obtiendriez (apparemment) la bonne réponse si vous aviez inclus des crochets pour forcer la préséance, ainsi:

if (i==5) & (ii=10)

provoquerait l'impression de la déclaration. C’est la mauvaise chose à faire, cependant - "&" A beaucoup de sémantique différente de "and" - (priorité, court-circuit, comportement avec des arguments entiers, etc.), il est donc heureux que vous attrapé ceci ici plutôt que d’être dupe jusqu’à ce qu’il produise des insectes moins évidents.

27
Brian

Les opérateurs appropriés à utiliser sont les mots clés 'ou' et 'et', qui, dans votre exemple, la manière correcte de l'exprimer serait:

if i == 5 and ii == 10:
    print "i is 5 and ii is 10"

Vous pouvez vous reporter aux détails dans la section section "Opérations booléennes" de la référence du langage .

15
Seh Hui Leong

Vous pouvez également les tester en couple.

if (i,ii)==(5,10):
    print "i is 5 and ii is 10"
7
fulmicoton

& est utilisé pour une comparaison bit par bit. utilisez and à la place. et d'ailleurs, vous n'avez pas besoin de point-virgule à la fin de l'instruction print.

6
SilentGhost

En python, utilisez and au lieu de && comme ça:

#!/usr/bin/python
foo = True;
bar = True;
if foo and bar:
    print "both are true";

Cela imprime:

both are true
2
Tim Ottinger