2009-03-04 18 views
31

En C# podemos utilizar && (booleano y) de esta manera:Cómo utilizar booleano 'y' en Python

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

Pero trata de que con Python:

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

consigo un error: SyntaxError: invalid syntax

Si uso un solo &, al menos no obtengo ningún error de sintaxis. ¿Cómo hago un booleano && en Python?

Respuesta

52

Prueba esto:

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

Editar: Ah, y no necesitas ese punto y coma en la última línea (edición para sacarlo de mi código).

+0

El punto y coma es útil si queremos combinar líneas de códigos. – riza

+1

La combinación de líneas no es la forma "pitónica" aunque – Rodrigo

+0

Aunque puede combinar líneas, como dice Rodrigo, no es "pitónico". Como en este caso particular el punto y coma no tuvo ningún efecto, hice un comentario sobre su redundancia. Supuse que el interlocutor era nuevo para Python y no quería hinchar mi respuesta en cuanto a lo que es "pitónico" y lo que hace el punto y coma. – Mizipzor

6

& se usa para la comparación bit a bit. use and en su lugar. y por cierto, no necesita punto y coma al final de la declaración de impresión.

15

El operador correcta a utilizar son las palabras clave 'o' y 'y', que en su ejemplo, la forma correcta de expresar esto sería:

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

puede hacer referencia a los detalles en el "Boolean Operations" section in the language reference .

+0

Cada vez que veo 'y', entiendo por mis paréntesis – Mawg

7

También puede probarlos como pareja.

if (i,ii)==(5,10): 
    print "i is 5 and ii is 10" 
+1

El pedante en mí quiere señalar que debe decir" tupla "en lugar de" pareja ", pero sé lo que quiere decir. :) –

+0

¿Una pareja no es una tupla? – fulmicoton

-2

en Python, utilice and en lugar de && así:

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

Esta impresora:

both are true 
+1

Más precisamente, deletreamos "&&" como "y". Deletreamos "&" como "&" ya que tanto en C# como en python estos realizan un funcionamiento bit a bit, en lugar de lógico, y. – Brian

+1

Tienes razón, por supuesto. Disculpas –

22

Como se ha señalado, "&" en Python realiza una función y operación, como lo hace en C#. and es el equivalente apropiado al operador &&.

Dado que estamos tratando con booleanos (i == 5 es True y ii == 10 es también True), usted puede preguntarse por qué esto no funciona, ya sea de todos modos (verdadero ser tratado como un número entero cantidad aún debe significar verdadera & Verdadero es un verdadero valor), o lanzar una excepción (por ejemplo, prohibiendo operaciones bit a bit en tipos booleanos)

La razón es la precedencia del operador.El "and" operador se une más débilmente que ==, por lo que la expresión: "i==5 and ii==10" es equivalente a: "(i==5) and (ii==10)"

Sin embargo, a nivel de bits & tiene una prioridad más alta que "==" (puesto que no le gustaría expresiones como "a & 0xff == ch" para significar "a & (0xff == ch)"), por lo que la expresión de hecho se interpreta como:

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

que está utilizando el operador del pitón de encadenamiento en el sentido de: ¿el valuei de la Segunda AND con 5 iguales tanto iy 10. Obviamente esto nunca será cierto.

Se podría conseguir realmente (aparentemente) la respuesta correcta si se había incluido entre paréntesis para forzar la precedencia, así que:

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

haría que la declaración se va a imprimir. Sin embargo, es incorrecto: "&" tiene muchas semánticas diferentes a "and" - (precedencia, cortocircuito, comportamiento con argumentos enteros, etc.), por lo que es afortunado que haya captado esto aquí en lugar de dejarse engañar hasta que haya producido errores menos obvios.