Aqui está o meu 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
Estou recebendo um erro no condicional IF .
O que estou fazendo errado?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
fonte
fonte
&&
e sugerir que eles possam querer usar a palavra-chaveand
. O mesmo vale para coisas como++
e outros operadores comuns de outros idiomas.import this
Respostas:
Você gostaria em
and
vez de&&
.fonte
&&
eAND
obtive um erro (não esperando que o python desejasse a palavra em minúsculaand
).Python usa
and
eor
condicionais.ie
fonte
and
tem precedência mais alta queor
.A razão pela qual você obtém um
SyntaxError
é que não há&&
operador no Python. Da mesma forma||
e não!
são operadores Python válidos .Alguns dos operadores que você conhece de outros idiomas têm um nome diferente no Python. Os operadores lógicos
&&
e||
são realmente chamadosand
eor
. Da mesma forma, o operador de negação lógica!
é chamadonot
.Então você pode escrever:
ou até:
Algumas informações adicionais (que podem ser úteis):
Resumi o operador "equivalentes" nesta tabela:
Veja também a documentação do Python: 6.11. Operações booleanas .
Além dos operadores lógicos, o Python também possui operadores bit a bit / binários:
Não há negação bit a bit no Python (apenas o operador inverso bit a bit
~
- mas isso não é equivalente anot
).Veja também 6.6. Operações aritméticas unárias e bit a bit / binárias e 6.7. Operações aritméticas binárias .
Os operadores lógicos (como em muitos outros idiomas) têm a vantagem de estar em curto-circuito. Isso significa que se o primeiro operando já define o resultado, o segundo operador não é avaliado.
Para mostrar isso, uso uma função que simplesmente pega um valor, imprime e retorna novamente. Isso é útil para ver o que é realmente avaliado devido às instruções de impressão:
Como você pode ver, apenas uma instrução de impressão é executada; portanto, o Python nem sequer olhou para o operando certo.
Este não é o caso dos operadores binários. Aqueles sempre avaliam os dois operandos:
Mas se o primeiro operando não for suficiente, é claro que o segundo operador será avaliado:
Para resumir isso, aqui está outra tabela:
O
True
eFalse
representa o quebool(left-hand-side)
retorna, eles não precisam serTrue
ouFalse
, eles apenas precisam retornarTrue
ouFalse
quandobool
são chamados (1).Portanto, no pseudo-código (!), As funções
and
eor
funcionam assim:Note que este é pseudo-código e não código Python. No Python, você não pode criar funções chamadas
and
ouor
porque são palavras-chave. Além disso, você nunca deve usar "avaliar" ouif bool(...)
.Customizando o comportamento de suas próprias classes
Essa
bool
chamada implícita pode ser usada para personalizar como suas classes se comportamand
,or
enot
.Para mostrar como isso pode ser personalizado, eu uso essa classe, que
print
é outra coisa para rastrear o que está acontecendo:Então, vamos ver o que acontece com essa classe em combinação com esses operadores:
Se você não possui um
__bool__
método, o Python também verifica se o objeto possui um__len__
método e se ele retorna um valor maior que zero. Isso pode ser útil saber caso você crie um contêiner de sequência.Veja também 4.1. Teste do valor da verdade .
Matrizes e subclasses NumPy
Provavelmente um pouco além do escopo da pergunta original, mas no caso de você estar lidando com matrizes ou subclasses NumPy (como Pandas Series ou DataFrames), a
bool
chamada implícita aumentará o temidoValueError
:Nesses casos, você pode usar a lógica e a função do NumPy, que executa um elemento
and
(ouor
):Se você está lidando apenas com matrizes booleanas, também pode usar os operadores binários com o NumPy, eles realizam comparações entre elementos (mas também binárias):
(1)
Que a
bool
chamada aos operandos deve retornarTrue
ouFalse
não está completamente correta. É apenas o primeiro operando que precisa retornar um booleano em seu__bool__
método:Isso porque,
and
na verdade, retorna o primeiro operando se o primeiro operando for avaliadoFalse
e, se for avaliadoTrue
, retornará o segundo operando:Da mesma forma,
or
mas apenas o contrário:No entanto, se você usá-los em uma
if
declaraçãoif
, também implicitamente chamarábool
o resultado. Portanto, esses pontos mais delicados podem não ser relevantes para você.fonte
Dois comentários:
and
eor
para operações lógicas em Python.fonte
Você usa
and
eor
executa operações lógicas como em C, C ++. Como literalmenteand
é&&
eor
é||
.Dê uma olhada neste exemplo divertido,
Digamos que você queira criar Logic Gates em Python:
Agora tente ligar para eles:
Isso produzirá:
Espero que isto ajude!
fonte
Eu fui com uma solução puramente matemática:
fonte
Provavelmente, esse não é o melhor código para esta tarefa, mas está funcionando -
fonte
Um simples
&
(não o dobro&&
) é suficiente ou, como a resposta principal sugere, você pode usar 'e'. Eu também achei isso em pandasse substituirmos o "&" por "e", ele não funcionará.
fonte
talvez com & em vez% seja mais rápido e mantenha a legibilidade
outros testes pares / ímpares
x é par? x% 2 == 0
x é ímpar? não x% 2 == 0
talvez seja mais claro com bit a bit e 1
x é ímpar? x & 1
x é par? não x & 1 (não ímpar)
fonte
Uso de "e" em condicional. Costumo usar isso ao importar no Jupyter Notebook:
fonte