MC-102 — Aula 03
Expressões Relacionais, Lógicas e Comandos Condicionais

Jacques Wainer

O Tipo bool

Em python o tipo bool especifica os valores booleanos falso (False) e verdadeiro (True).

Expressões relacionais

Expressões relacionais

Expressões relacionais são aquelas que realizam uma comparação entre duas expressões e retornam

  1. False, se o resultado é falso

  2. True, se o resultado é verdadeiro.

Operadores Relacionais

Os operadores relacionais da linguagem Python são:

Expressões relacionais

Expressões relacionais

O que será impresso pelo programa?

print(9 > 3)
  
print( (3*4)/2 != (2*3) )

a = 1;
b = -1;
print(a!=b);

Expressões lógicas

Expressões lógicas

Expressões lógicas são aquelas que realizam uma operação lógica (ou, e, não, etc...) e retornam verdadeiro ou falso (como as expressões relacionais).

Operadores Lógicos

Na linguagem Python temos os seguintes operadores lógicos:

Expressões lógicas

Qual o resultado da expressão lógica abaixo?

    a = 0
    b = 0
    a == 0 and b == 0

Expressões lógicas

Qual o resultado da expressão lógica abaixo?

    a = 0
    b = 1
    a == 0 or b == 0

Expressões lógicas

Qual o resultado da expressão lógica abaixo?

    a = 0
    b = 1
    not (a != b)

O que será impresso pelo programa?

print((8>9) and (10!=2))
  
print((14 > 100) or (2 > 1))
 
print(not (14>100)  and not (1>2)  )

Precedência

Precedência é a ordem na qual os operadores serão avaliados quando o programa for executado. Em Python, os operadores são avaliados na seguinte ordem:

Normalmente essa precedencia para os operadores lógicos é a mais intuitiva, mas na dúvida coloque parenteses.

Cuidado com testar se uma variável esta entre 2 valores

em Matemática \(1 < x \leq 10\)

Em Python NÃO podemos escrever

1 < x <= 10

mas temos que escrever assim:

1 < x and x <= 10

Comandos condicionais

Comandos condicionais

Um comando condicional é aquele que permite decidir se um determinado bloco de comandos deve ou não ser executado, a partir do resultado de uma expressão relacional ou lógica.

Bloco de comandos

Comandos condicionais - if

Comandos condicionais

O programa abaixo determina se um valor é par.

a = int(input())
if a%2 == 0:
  print("O número digitado é par")

Comandos condicionais - if-else

Comandos condicionais

Exemplo: Determinando o menor de dois números:

a = int(input("Digite um número:"))
b = int(input("Digite um número:"))
if a < b:
   print("O menor número é: ", a )
else:
   print("O menor número é: ", b )

Comandos condicionais

Exemplo: Usando apenas operadores relacionais e aritméticos, vamos escrever um programa que lê um número e verifica em qual dos seguintes casos o número se enquadra:

Comandos condicionais

a = int(input("Digite um número:"))
if a % 2 == 0:    #<-- Se número for par, executa bloco abaixo
   if a<100:
      print("O número é par e menor do que 100")
   else:
      print("O número é par e maior ou igual que 100")
else:           #<-- Se número for ímpar, executa bloco abaixo
   if a<100:
      print("O número é ímpar e menor do que 100")
   else:
      print("O número é ímpar e maior ou igual que 100")

Note o novo uso do input

Usando operadores lógicos, refazer este programa

Comandos condicionais

print("Digite um número:")
a = int(input())
if (a % 2 == 0) and (a < 100):
   print("O número é par e menor do que 100")
if (a % 2 == 0) and (a >= 100):
   print("O número é par e maior ou igual que 100")
if (a % 2 != 0) and (a < 100):
   print("O número é ímpar e menor do que 100")
if (a % 2 != 0) and (a >= 100):
   print("O número é ímpar e maior ou igual que 100")

Comandos condicionais

Lembre-se que o que define a qual bloco de comandos um comando pertence é a sua indentação!

if cond1:
  if cond2:
    comando1
else:
  comando2

Quando o comando2 é executado?

Exemplo; Comandos condicionais

Lembre-se que o que define a qual bloco de comandos um comando pertence é a sua indentação!

if cond1:
  if (cond2):
    comando1
else:
  comando2

Quando o comando2 é executado?
Resposta: quando cond1 for falsa.

Exemplo: Comandos condicionais

if cond1:
  if cond2:
    comando1
  else:
    comando2

Quando o comando2 é executado?

Exemplo: Comandos condicionais

if cond1:
  if cond2:
    comando1
  else:
    comando2

Quando o comando2 é executado?
Resposta: quando a cond1 for verdadeira e cond2 for falsa.

Exemplo: Comandos condicionais

if cond1:
  if cond2:
    comando1
  else:
    comando2
else:
  if cond3:
     comando3
  else:
     comando4 

Quando o comando4 é executado?

Exemplo: Comandos condicionais

if cond1:
  if cond2:
    comando1
  else:
    comando2
else:
  if cond3:
     comando3
  else:
     comando4 

Quando o comando4 é executado?
Resposta: quando a cond1 for falsa e cond3 for falsa.

Exemplo

a = 5
if a > 3:
  if a < 7:
    print("a")
else:
  if a > -10:
    print("b")
  else:
    print("c")

O que será impresso?

Exemplo

a = -12
if a > 3:
  if a < 7:
    print("a")
else:
  if a > -10:
    print("b")
  else:
    print("c")

O que será impresso?

Exemplo

a = 9
if a > 3:
  if a < 7:
    print("a")
else:
  if a > -10:
    print("b")
  else:
    print("c")

O que será impresso?

Comandos Condicionais if-else

Alternativa: um if debaixo do outro

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
  ...
if a == "r":
  ...
if a == "c":
  ...
if a != "q" and a != "r" and a != "c":
  print("Opção inválida!")

Alternativa: um if debaixo do outro

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
  x = input("Digite o tamanho do lado do quadrado: ")
  lado = float(x)
  print("A área é", lado*lado)
if a == "r":
  ...
if a == "c":
  ...
if a != "q" and a != "r" and a != "c":
  print("Opção inválida!")

Vamos chamar essa solução de um if debaixo do outro

Alternativa: um if debaixo do outro

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
   ... 
if a == "r":
   ...
if a == "c":
   ...
if a != "q" and a != "r" and a != "c":
   print("Opção inválida!")

Alternativa: if-else encaixados

Refazendo o programa utilizando if-else:

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
   ...
else:
   if a == "r":
      ... 
   else:
      if a == "c":
         ...
      else:
         ...

Na versão de if-else encaixados, a parte then sabe o que fazer, as outras perguntas ficam apenas na parte else

O ultimo caso, ficou no ultimo else - não precisamos escreve-lo explicitamente.

Comparação

Alternativa: if-elif

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
    ...
elif a == "r":
    ... 
elif a == "c":
    ...
else:
    ...

Comando if-elif

A versão completa do programa:

print("Digite uma opção (q, r, ou c):")
a = input()
if a == "q":
  x = input("Digite o tamanho do lado do quadrado: ")
  l = float(x)
  print("A área é :", l*l)
elif a == "r":
  x1 = input("Digite o tamanho de um lado do retângulo: ")
  l1 = float(x1)
  x2 = input("Digite o tamanho do outro lado do retângulo: ")
  l2 = float(x2)
  print("A área é :", l1*l2)
elif a == "c":
  x = input("Digite o tamanho do raio: ")
  r = float(x)
  print("A área é :", 3.1415*r*r)
else:
  print("Opção inválida!")

Comandos if-elif

Outro exemplo:

Faça um programa que leia o número de pontos de cada time, e as cinco informações acima de dois times e decida qual time venceu o campeonato.

Comando if-elif

Abaixo temos o código que faz a leitura das informações necessárias.

print("Lendo dados do time 1")
pontos1 = int(input("Número de pontos:"))
vitorias1 = int(input("Número de vitórias:"))
saldo1 = int(input("Saldo de gols:"))
gols1 = int (input("Gols marcados:"))
vermelho1 = int(input("Número de cartões vermelhos:"))
amarelo1 = int(input("Número de cartões amarelos:"))

print("Lendo dados do time 2")
pontos2 = int(input("Número de pontos:"))
vitorias2 = int(input("Número de vitórias:"))
saldo2 = int(input("Saldo de gols:"))
gols2 = int (input("Gols marcados:"))
vermelho2 = int(input("Número de cartões vermelhos:"))
amarelo2 = int(input("Número de cartões amarelos:"))

Comando if-elif

Começamos então a testar quem possui mais vitórias para decidir o vencedor:

print("Lendo dados do time 1")
...
...

if pontos1 > pontos2:
   print("Time 1 ganha do Time 2")
elif pontos1 < pontos2:
   print("Time 2 ganha do Time 1")
       

O que podemos deduzir se as duas condições dos ifs acima forem falsas? Resposta: O número de pontos dos dois times é igual. Devemos então continuar testando as outras informações...

Comando if-elif

if pontos1 > pontos2:
   print("Time 1 ganha do Time 2")
elif pontos1 < pontos2:
   print("Time 2 ganha do Time 1")
elif vitorias1 > vitorias2:
   print("Time 1 ganha do Time 2")
elif vitorias1 < vitorias2:
   print("Time 2 ganha do Time 1")
elif saldo1 > saldo2:
   print("Time 1 ganha do Time 2")
elif saldo1 < saldo2:
   print("Time 2 ganha do Time 1")
elif gols1 > gols2:
   print("Time 1 ganha do Time 2")
elif gols1 < gols2:
   print("Time 2 ganha do Time 1")
elif vermelho1 < vermelho2:
   print("Time 1 ganha do Time 2")
elif vermelho1 > vermelho2:
   print("Time 2 ganha do Time 1")
elif amarelo1 < amarelo2:
   print("Time 1 ganha do Time 2")
elif amarelo1 > amarelo2:
   print("Time 2 ganha do Time 1")   

É possível que todas as condições avaliadas acima sejam falsas? Resposta: Sim. Neste caso os dois times continuam empatados. Devemos informar isto!

Comando if-elif

...
...
elif vermelho1 < vermelho2:
   print("Time 1 ganha do Time 2")
elif vermelho1 > vermelho2:
   print("Time 2 ganha do Time 1")
elif amarelo1 < amarelo2:
   print("Time 1 ganha do Time 2")
elif amarelo1 > amarelo2:
   print("Time 2 ganha do Time 1")   
else:
   print("Times continuam empatados!")

Pela regra do campeonato, se os times continuarem empatados então o desempate se dará por sorteio!