Aquí está mi código:
def front_back(a, b):
# +++your code here+++
if len(a) % 2 == 0 && len(b) % 2 == 0:
return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]
else:
#todo! Not yet done. :P
return
Recibo un error en el condicional IF .
¿Qué estoy haciendo mal?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
fuente
fuente
&&
y sugerirles que tal vez quieran usar la palabra claveand
. Lo mismo ocurre con cosas como++
y otros operadores comunes de otros idiomas.import this
Respuestas:
Te gustaría en
and
lugar de&&
.fuente
&&
yAND
obtuve un error (no esperaba que Python quisiera la palabra en minúsculasand
).Python utiliza
and
yor
condicionales.es decir
fuente
and
tiene mayor prioridad queor
.La razón por la que obtienes un
SyntaxError
es que no hay&&
operador en Python. Del mismo modo||
y no!
son operadores válidos de Python.Algunos de los operadores que puede conocer de otros idiomas tienen un nombre diferente en Python. Los operadores lógicos
&&
y en||
realidad se llamanand
yor
. Del mismo modo,!
se llama al operador de negación lógicanot
.Entonces podrías escribir:
o incluso:
Alguna información adicional (que puede ser útil):
Resumí el operador "equivalentes" en esta tabla:
Consulte también la documentación de Python: 6.11. Operaciones booleanas .
Además de los operadores lógicos, Python también tiene operadores bit a bit / binarios:
No hay negación bit a bit en Python (solo el operador inverso bit a bit
~
, pero eso no es equivalente anot
).Ver también 6.6. Operaciones aritméticas unitarias y bit a bit / binarias y 6.7. Operaciones aritméticas binarias .
Los operadores lógicos (como en muchos otros idiomas) tienen la ventaja de que están en cortocircuito. Eso significa que si el primer operando ya define el resultado, entonces el segundo operador no se evalúa en absoluto.
Para mostrar esto, uso una función que simplemente toma un valor, lo imprime y lo devuelve nuevamente. Esto es útil para ver qué se evalúa realmente debido a las declaraciones de impresión:
Como puede ver, solo se ejecuta una declaración de impresión, por lo que Python realmente ni siquiera miró el operando correcto.
Este no es el caso de los operadores binarios. Aquellos siempre evalúan ambos operandos:
Pero si el primer operando no es suficiente, entonces, por supuesto, se evalúa el segundo operador:
Para resumir esto aquí hay otra tabla:
El
True
yFalse
representa lo quebool(left-hand-side)
regresa, no tienen que serTrue
oFalse
, solo necesitan regresarTrue
oFalse
cuandobool
se les solicite (1).Entonces, en Pseudo-Code (!) Las funciones
and
yor
funcionan así:Tenga en cuenta que este es un pseudocódigo y no un código de Python. En Python no puede crear funciones llamadas
and
oor
porque son palabras clave. Además, nunca debe usar "evaluar" oif bool(...)
.Personalizando el comportamiento de tus propias clases
Este implícita
bool
llamada se puede utilizar para personalizar la forma en sus clases se comportan conand
,or
ynot
.Para mostrar cómo se puede personalizar esto, uso esta clase, que nuevamente
print
es algo para rastrear lo que está sucediendo:Entonces, veamos qué sucede con esa clase en combinación con estos operadores:
Si no tiene un
__bool__
método, Python también verifica si el objeto tiene un__len__
método y si devuelve un valor mayor que cero. Puede ser útil saberlo en caso de que cree un contenedor de secuencia.Ver también 4.1. Prueba de valor de verdad .
Matrices y subclases NumPy
Probablemente un poco más allá del alcance de la pregunta original, pero en caso de que esté lidiando con matrices o subclases NumPy (como Pandas Series o DataFrames), la
bool
llamada implícita aumentará el temidoValueError
:En estos casos, puede usar la lógica y la función de NumPy que realiza un elemento inteligente
and
(oor
):Si se trata solo de matrices booleanas , también podría usar los operadores binarios con NumPy, estos realizan comparaciones de elementos (pero también binarios):
(1)
Que la
bool
llamada en los operandos tiene que regresarTrue
oFalse
no es completamente correcta. Es solo el primer operando que necesita devolver un booleano en su__bool__
método:Esto se debe a que en
and
realidad devuelve el primer operando si el primer operando se evalúaFalse
y si se evalúa aTrue
continuación, devuelve el segundo operando:Del mismo modo,
or
pero al revés:Sin embargo, si los usa en una
if
declaraciónif
, también invocará implícitamentebool
el resultado. Entonces, estos puntos más finos pueden no ser relevantes para usted.fuente
Dos comentarios:
and
yor
para operaciones lógicas en Python.fuente
Utiliza
and
yor
para realizar operaciones lógicas como en C, C ++. Como literalmenteand
es&&
yor
es||
.Echa un vistazo a este divertido ejemplo,
Digamos que quieres construir puertas lógicas en Python:
Ahora intenta llamarlos:
Esto generará:
¡Espero que esto ayude!
fuente
Fui con una solución puramente matemática:
fuente
Probablemente este no sea el mejor código para esta tarea, pero está funcionando.
fuente
Un solo
&
(no doble&&
) es suficiente o, como sugiere la respuesta principal, puede usar 'y'. También encontré esto en pandassi reemplazamos "&" con "y", no funcionará.
fuente
quizás con & en cambio% es más rápido y mantiene la lectura
otras pruebas pares / impares
x es par? x% 2 == 0
x es impar? no x% 2 == 0
tal vez es más claro con bit a bit y 1
x es impar? x y 1
x es par? no x & 1 (no impar)
fuente
Uso de "y" en condicional. A menudo uso esto cuando importo en Jupyter Notebook:
fuente