Operadores Lógicos

and, or, not


Material de apoio para a disciplina Linguagem de Programação da UACSA/UFRPE

Produzido pelo prof. João Pimentel

Dica!
📓

Faça um resumão ou mapa mental com os comandos e funções do Python que você já aprendeu. Senão, quando quiser revisar, você gastará muito tempo assistindo vídeos.


Às vezes só o if...else não é suficiente para resolvermos os nossos problemas. O mundo é complicado mesmo, cheio de regras. Veja, por exemplo, as regras para adotar uma criança:

Art. 42. Podem adotar os maiores de 18 (dezoito) anos, independentemente do estado civil. § 1º Não podem adotar os ascendentes e os irmãos do adotando. § 2o Para adoção conjunta, é indispensável que os adotantes sejam casados civilmente ou mantenham união estável, comprovada a estabilidade da família. § 3º O adotante há de ser, pelo menos, dezesseis anos mais velho do que o adotando. Art. 45. A adoção depende do consentimento dos pais ou do representante legal do adotando. § 1º. O consentimento será dispensado em relação à criança ou adolescente cujos pais sejam desconhecidos ou tenham sido destituídos do poder familiar. § 2º. Em se tratando de adotando maior de doze anos de idade, será também necessário o seu consentimento.

Tem 3 coisas que a gente pode fazer quando as condições são mais complicadas:

  • Usar um if dentro do outro (ifs aninhados)
  • Usar os operadores lógicos (and, or, not)
  • Usar if...elif...else
Você já viu como usar um if dentro do outro (ifs aninhados) na nossa lição com exemplos de uso do if. Agora vamos aprender a usar os operadores lógicos: and, or e not.

Bom, já introduzi o significado do and (e), or (ou) e not (não) na nossa Live 3. Então o melhor lugar para começar seria entrar lá no SIGAA e assistir novamente o começo dessa Live.

O vídeo a seguir explica muito bem o raciocínio lógico do and, or e not. Só precisa se ligar que o vídeo é sobre lógica de programação em geral, e não sobre Python, então tem algumas diferenças nos símbolos:

VídeoPython
=== (igualdade)
<>!= (diferença)
TRUETrue
FALSEFalse
ANDand
ORor
NOTnot

Vídeo 1 (10min):

A and B

O resultado só será verdadeiro se as duas partes (A e B) forem verdadeiras.

print(5>2 and 5>0)
Resultado: True

print(5>2 and 5>20)
Resultado: False

print(5>20 and 5>2)
Resultado: False

print(5>20 and 5>10)
Resultado: False

A or B

O resultado será verdadeiro quando pelo menos uma (A ou B) for verdadeira.

print(5>2 or 5>0)
Resultado: True

print(5>2 or 5>20)
Resultado: True

print(5>20 or 5>2)
Resultado: True

print(5>20 or 5>10)
Resultado: False

not A

O not (negação) inverte o resultado: o que era verdadeiro vira falso, e o que era falso vira verdadeiro.

print(not 5>2)
Resultado: False, por que 5>2 é True, e not True dá False

print(not 5>20)
Resultado: True, por que 5>20 é False, e not False dá True




EXEMPLOS

Quando eu quero saber se um número está dentro de um certo intervalo posso usar o and.

x = int(input('idade: ')) if x >= 2 and x <= 12: print('criança') if x > 12 and x <= 17: print('adolescente') if x > 17: print('velho(a)')
abra e execute esse exemplo no repl.it
Erro comum #1

Se liga que não é possível fazer x > 12 and <= 17 (x maior que doze e menor-igual a 17). Cada lado do and precisa ser uma expressão lógica completa: x > 12 and x <= 17 (x maior que doze e x menor-igual a 17)

Ou seja toda comparação precisa ter os dois lados (esquerdo e direito). Se eu escrever <= 17, cadê o lado esquerdo da comparação? O computador vai comparar 17 com o quê?!

Quando mais do que uma opção vai dar o mesmo resultado, posso usar o or.

x = input('letra: ') if x=='a' or x=='e' or x=='i' or x=='o' or x=='u': print('é vogal') else: print('não é vogal')
abra e execute esse exemplo no repl.it

Veja outro exemplo onde mais do que uma opção vai dar o mesmo resultado.

print('Quanto é 2+2*2?') print('a) 8') print('b) 4') print('c) -1') print('d) 6') x = input('resposta: ') if x == 'd' or x == 'D' or x == '6': print('certo!') else: print('errado =(')
abra e execute esse exemplo no repl.it

Na UFRPE, uma pessoa é reprovada em uma disciplina se não atingir a média 5. A pessoa também é reprovada se não atingir a frequência mínima de 75% das aulas.

Escreva um programa que pergunta a média da pessoa, a quantidade de horas de aula que ela assistiu, e a carga horária total da disciplina. O programa vai então dizer se a pessoa foi reprovada ou não.

Clique para ver a resposta no repl.it

Seus pais só deixam você jogar se já tiver lavado a louça e tomado banho. A não ser que você tenha feito o almoço, nesse caso tá liberado(a).

lavou = input('Já lavou a louça (s ou n)? ') banho = input('Já tomou banho (s ou n)? ') almoco = input('Fez o almoço hoje (s ou n)? ') if (lavou == 's' and banho == 's') or almoco == 's': print('blz, então pode jogar') else: print('bora contribuir com a casa também, né?')
abra e execute esse exemplo no repl.it

Veja também esse outro código que atende ao enunciado, mas sem usar o or.

1/5

...

ou

?
CERTO!
...



Lembra daquelas regras de adoção, que mostrei no começo desta lição? Clique aqui para ver o código de um programa que consegue decidir se uma adoção pode ser feita ou não.

fim =)