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 thisRespuestas:
Te gustaría en
andlugar de&&.fuente
&&yANDobtuve un error (no esperaba que Python quisiera la palabra en minúsculasand).Python utiliza
andyorcondicionales.es decir
fuente
andtiene mayor prioridad queor.La razón por la que obtienes un
SyntaxErrores 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 llamanandyor. 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
TrueyFalserepresenta lo quebool(left-hand-side)regresa, no tienen que serTrueoFalse, solo necesitan regresarTrueoFalsecuandoboolse les solicite (1).Entonces, en Pseudo-Code (!) Las funciones
andyorfuncionan así:Tenga en cuenta que este es un pseudocódigo y no un código de Python. En Python no puede crear funciones llamadas
andoorporque son palabras clave. Además, nunca debe usar "evaluar" oif bool(...).Personalizando el comportamiento de tus propias clases
Este implícita
boolllamada se puede utilizar para personalizar la forma en sus clases se comportan conand,orynot.Para mostrar cómo se puede personalizar esto, uso esta clase, que nuevamente
printes 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
boolllamada 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
boolllamada en los operandos tiene que regresarTrueoFalseno es completamente correcta. Es solo el primer operando que necesita devolver un booleano en su__bool__método:Esto se debe a que en
andrealidad devuelve el primer operando si el primer operando se evalúaFalsey si se evalúa aTruecontinuación, devuelve el segundo operando:Del mismo modo,
orpero al revés:Sin embargo, si los usa en una
ifdeclaraciónif, también invocará implícitamenteboolel resultado. Entonces, estos puntos más finos pueden no ser relevantes para usted.fuente
Dos comentarios:
andyorpara operaciones lógicas en Python.fuente
Utiliza
andyorpara realizar operaciones lógicas como en C, C ++. Como literalmenteandes&&yores||.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