Operadores lógicos#
Operador and
#
Nos exercícios anteriores vimos como testar uma única condição, mas em muitos casos pode ser útil testar mais do que uma condição de uma vez. Por exemplo, um arco-íris ocorre se está chovendo e fazendo sol, simultaneamente. Ou seja:
esta_chovendo = True
faz_sol = True
if esta_chovendo and faz_sol:
print('Arco-íris!')
else:
print('Sem arco-íris. Alguma das condições não foi satisfeita.')
Exercise 1
Answer
Será impresso a mensagem Arco-íris!
no terminal.
A condição esta_chovendo and faz_sol
será avaliada como True and True
resultando no valor True
, desta forma, o trecho de código do if
será executado, imprimindo a mensagem Arco-íris!
no terminal.
Exercise 2
Answer
Será impresso a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
A condição esta_chovendo and faz_sol
será avaliada como False and True
resultando no valor False
, pois ao utilizar o operador and
, os dois lados da expressão devem possuir o valor booleano True
.
Desta forma, o trecho de código do else
será executado imprimindo a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
Exercise 3
Answer
Será impresso a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
A condição esta_chovendo and faz_sol
será avaliada como True and False
resultando no valor False
, pois ao utilizar o operador and
, os dois lados da expressão devem possuir o valor booleano True
.
Desta forma, o trecho de código do else
será executado imprimindo a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
Exercise 4
Answer
Será impresso a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
A condição esta_chovendo and faz_sol
será avaliada como False and False
resultando no valor False
.
Desta forma, o trecho de código do else
será executado imprimindo a mensagem Sem arco-íris. Alguma das condições não foi satisfeita.
no terminal.
Revisão#
A tabela a seguir resume os resultados obtidos ao utilizar o operador lógico and
.
Operador and |
Resultado |
---|---|
True and True |
True |
True and False |
False |
False and True |
False |
False and False |
False |
Perceba que ao utilizar o operador lógico and
, o resultado será True
somente quando todos os valores envolvidos forem True
. Também é possível construir condições utilizando vários operadores and
(Por exemplo: True and True and True
).
Exercise 5
Exercise 6
Operador or
#
Em outros casos é suficiente que pelo menos uma das condições for satisfeita. Por exemplo: uma pessoa paga meia entrada no teatro se for estudante ou for idosa.
Exercise 7
Answer
Ao entrar com o valor 18
para a idade
, a condição idade >= 65
será avaliada com a valor booleano False
. E esse valor será armazenado na variável idoso
.
Em seguida, a condição do if
, estudante or idoso
, será avaliada como True or False
. Isso resultará no valor booleano True
, fazendo com que o bloco do if
seja executado, imprimindo Paga meia!
.
Exercise 8
Answer
Ao entrar com o valor 65
para a idade
, a condição idade >= 65
será avaliada com a valor booleano True
. E esse valor será armazenado na variável idoso
.
Em seguida, a condição do if
, estudante or idoso
, será avaliada como True or True
.
É possível notar que nos casos em que a variável estudante
armazena o valor booleano True
, não importa a idade informada, a mensagem impressa será Paga meia!
.
Exercise 9
Answer
Ao entrar com o valor 65
para a idade
, a condição idade >= 65
será avaliada com a valor booleano True
. E esse valor será armazenado na variável idoso
.
Em seguida, a condição do if
, estudante or idoso
, será avaliada como False or True
. Desta forma, o bloco if
é executado e a mensagem Paga meia!
é impressa no terminal.
Exercise 10
Answer
Ao entrar com o valor 18
para a idade
, a condição idade >= 18
será avaliada com a valor booleano False
. E esse valor será armazenado na variável idoso
.
Em seguida, a condição do if
, estudante or idoso
, será avaliada como False or False
. Note que ao usar o operador or
esse é o único caso em que a mensagem Paga inteira...
é impressa.
Revisão#
A tabela a seguir resume os resultados obtidos ao utilizar o operador lógico or
.
Operador or |
Resultado |
---|---|
True or True |
True |
True or False |
True |
False or True |
True |
False or False |
False |
Perceba que ao utilizar o operador lógico or
, o resultado será True
sempre que pelo menos um dos valores forem True
. Também é possível construir condições utilizando vários operadores or
(Por exemplo: True or False or True
).
Operador not
#
Também existe a possibilidade de querermos considerar os casos em que uma condição é falsa. Por exemplo: sempre tomo sopa quando o dia não está quente.
Exercise 11
Answer
Como a variável esta_quente
armazena o valor False
, a condição do if
será avaliada como not False
resultando no valor booleano True
.
Desta forma, o bloco do if
é executado imprimindo a mensagem Vou tomar sopa
no terminal.
Exercise 12
Answer
Como a variável esta_quente
armazena o valor True
, a condição do if
será avaliada como not True
resultando no valor booleano False
.
Desta forma, o bloco do if
não é executado e nenhuma mensagem será impressa no terminal.
Resumindo#
Vamos resumir o comportamento dos operadores and
, or
e not
:
and
: devolveTrue
se AMBOS os valores forem verdadeiros;or
: devolveTrue
se PELO MENOS UM dos valores forem verdadeiros;not
: inverte deTrue
paraFalse
e vice-versa.
Exercise 13
Exercise 14
Exercise 15
Answer
if lado1 == lado2 and lado1 != lado3
Um erro comum neste exercício é tentar combinar duas comparações de maneira incompleta. Por exemplo, para verificar se um triângulo é isósceles:
if lado1 == lado2 and != lado3
Apesar de ser razoável achar que esse código seria válido ele não funciona. Lembre-se que os operadores lógicos (and
e or
) combinam dois valores booleanos, portanto cada lado do operador deve ser uma expressão completa.
Exercise 16
Exercise 17
Funções + Operadores Condicionais#
Parabéns! A cada aula estamos aprendendo muito sobre como desenvolver códigos. Conforme formos avançando vamos perceber várias formas de combinar essas ferramentas.
E aqui vamos apresentar uma forma de combinar a utilização de funções e operadores relacionais para facilitar o desenvolvimento dos nossos códigos.
Considere a função abaixo.
Essa função recebe como argumento um número representando a nota de um aluno e retorna o valor booleano True
se a nota do aluno for maior ou igual a 5
e False
caso contrário.
Exercise 18
Answer
Ao chamar a função aluno_aprovado
passando o valor 10
como argumento, será retornado o valor True
. Pois, dentro da função, a condição nota >= 5
do if
será avaliada como 10 >= 5
resultando no valor booleano True
.
Dessa forma, o bloco do if
é executado, retornando o valor True
.
Curiosidade: É possível reescrever a função aluno_aprovado
sem utilizar os operadores if
e else
, veja a seguir:
Agora podemos utilizar nossa função para imprimir para o aluno se ele foi aprovado ou não na disciplina.
Exercise 19
Answer
Será impresso a mensagem Você foi aprovado na disciplina.
.
Nossa, esse código está utilizando a função no lugar de uma expressão com operadores relacionais! Isso é diferente do que vimos até agora.
Esse código funciona e utilizar a função junto com o operador if
pode ser bem útil no futuro.
Conforme formos avançando na disciplina vamos começar a escrever códigos cada vez mais extensos e complexos. E utilizar funções pode ser um jeito de organizar nosso código.
Exercise 20
EXERCÍCIOS ADICIONAIS#
Exercise 21