Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que são usados os operadores & e | e não 'and' e 'or'?

Porque usar os operadores 'and' e 'or' nessa situação causa um erro? Qual a diferença entre &, && e 'and' (e |, || e 'or') ?

1 resposta
solução!

No Python (e na maioria das linguagens) temos dois tipos de operadores lógicos: aqueles que trabalham apenas com o valor verdade do operando e aqueles que trabalham bit a bit (bitwise) no operando.

Se você checar o valor verdade dos números, verá que 0 é falso e 1 e 2 são verdadeiro. Assim, podemos entender esse exemplo:

print(1 and True) # True
print(2 and True) # True
print(1 and 0) # 0 (que é falso)
print(1 or 2) # 1 (que é verdadeiro)

Isso acontece pois os operadores and e or só levam isso em consideração, se é falso ou verdadeiro.

Já os operadores bitwise, levam todos os bits do operando em consideração, ou seja, como

1 = 00000000000000000000000000000001
2 = 00000000000000000000000000000010

Poderíamos fazer o OU e o E, bit a bit, ficando assim:

  1 = 00000000000000000000000000000001
  2 = 00000000000000000000000000000010
1&2 = 00000000000000000000000000000000 ( que vale 0)
1|2 = 00000000000000000000000000000011 ( que vale 3)

Verificando no Python temos:

print(1 | 2) # 3
print(1 & 2) # 0

No caso do exercício, como já temos valores booleanos, creio que não faria diferença trocar os operadores bitwise (&,|) pelos outros operadores (and,or). A questão do erro que aparece é outra: a precedência dos operadores, ou seja, qual é executado primeiro. Por isso, colocamos os parênteses e tudo continua funcionando.

Espero ter ajudado, Abraços!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software