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?
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).
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.
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 .
Vous pouvez également les tester en couple.
if (i,ii)==(5,10):
print "i is 5 and ii is 10"
&
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.
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