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: devolveTruese AMBOS os valores forem verdadeiros;or: devolveTruese PELO MENOS UM dos valores forem verdadeiros;not: inverte deTrueparaFalsee 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