• Python
  • 04. Desvios Condicionais (if)
  • Operadores Lógicos

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

Teste o programa acima. O que foi impresso no terminal?

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

Considere agora o mesmo código, mas para valores diferentes de esta_chovendo e faz_sol.

esta_chovendo = False
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.')

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

Considere agora o mesmo código, mas para valores diferentes de esta_chovendo e faz_sol.

esta_chovendo = True
faz_sol = False

if esta_chovendo and faz_sol:
    print('Arco-íris!')
else:
    print('Sem arco-íris. Alguma das condições não foi satisfeita.')

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

Considere agora o mesmo código, mas para valores diferentes de esta_chovendo e faz_sol.

esta_chovendo = False
faz_sol = False

if esta_chovendo and faz_sol:
    print('Arco-íris!')
else:
    print('Sem arco-íris. Alguma das condições não foi satisfeita.')

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

Resolva o exercício Classificador de idade.

Acessar exercício

Exercise 6

Resolva o exercício Divisibilidade.

Acessar exercício

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

Considere o código a seguir:

idade = int(input("Qual a sua idade?"))

estudante = True
idoso = idade >= 65

if estudante or idoso:
    print('Paga meia!')
else:
    print('Paga inteira...')

Para o código acima, considere que foi informado o valor 18 para a idade. Qual mensagem será impressa no terminal?

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

Considere o código a seguir:

idade = int(input("Qual a sua idade?"))

estudante = True
idoso = idade >= 65

if estudante or idoso:
    print('Paga meia!')
else:
    print('Paga inteira...')

Para o código acima, considere que foi informado o valor 65 para a idade. Qual mensagem será impressa no terminal?

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

Considere o código a seguir:

idade = int(input("Qual a sua idade?"))

estudante = False
idoso = idade >= 65

if estudante or idoso:
    print('Paga meia!')
else:
    print('Paga inteira...')
Note que o valor para a variável estudante mudou para False. Agora considere que foi informado o valor 65 para a idade. Qual mensagem será impressa no terminal?

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

Considere o código a seguir:

idade = int(input("Qual a sua idade?"))

estudante = False
idoso = idade >= 65

if estudante or idoso:
    print('Paga meia!')
else:
    print('Paga inteira...')
Agora considere que foi informado o valor 18 para a idade. Qual mensagem será impressa no terminal?

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

Considere o código a seguir:

esta_quente = False

if not esta_quente:
    print('Vou tomar sopa')

Qual será o comportamento do código?

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

Considere o mesmo código, porém, agora a variável esta_quente armazena o valor True.

esta_quente = False

if not esta_quente:
    print('Vou tomar sopa')

Qual será o comportamento do código?

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: devolve True se AMBOS os valores forem verdadeiros;
  • or: devolve True se PELO MENOS UM dos valores forem verdadeiros;
  • not: inverte de True para False e vice-versa.

Exercise 13

Resolva o exercício Classificador de triângulos.

Acessar exercício

Exercise 14

Neste ponto, você deve ter implementado sua função classifica_triangulo.

É possível implementar essa função de diversas maneiras diferentes. Dependendo da ordem que você verifique os tipos de triângulos a implementação do código vai mudar.

Tente implementar as versões diferentes descritas a seguir e compare o código gerado para cada uma.

  1. Teste se o triângulo é equilátero, depois se é isósceles e depois se é escaleno;
  2. Teste se o triângulo é equilátero, depois se é escaleno e depois se é isósceles;
  3. Teste se o triângulo é isósceles, depois se é equilátero e depois se é escaleno;

Dica: Lembre-se que ao utilizarmos o else não precisamos construir nenhuma condição.

Exercise 15

Assuma que as variáveis lado1, lado2 e lado3 guardam as medidas dos lados do triângulo. Queremos começar a construir um pedaço do código da função classifica_triangulo.

O código abaixo vai gerar um erro de sintaxe. Veja se você consegue identificar onde está o problema.

if lado1 == lado2 and != lado3

Como você arrumaria este problema?

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

Resolva o exercício Ano Bissexto.

Acessar exercício

Exercise 17

Resolva o exercício Jaca Wars.

Acessar exercício

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.

def aluno_aprovado(nota):
    if nota >= 5:
        return True
    else:
        return False

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

Considere o código a seguir: aluno_aprovado(10)

O que essa chamada de função retornará?

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:

def aluno_aprovado(nota):
    return nota >= 5

Agora podemos utilizar nossa função para imprimir para o aluno se ele foi aprovado ou não na disciplina.

Exercise 19

No código abaixo, podemos escrever um código utilizando nossa função em conjunto com o operador if.

nota = 10
if aluno_aprovado(nota):
  print("Você foi aprovado na disciplina.")
else:
  print("Você não foi aprovado na disciplina.")

O que será impresso no terminal ao executarmos esse código?

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

Resolva o exercício Pedra, papel ou tesoura?.

Acessar exercício

EXERCÍCIOS ADICIONAIS#

Exercise 21

Se acabar os exercícios propostos neste handout, faça todos os outros exercícios disponíveis sobre if. Quanto mais, melhor! 💪

Acessar exercício