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

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 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)

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 - versão sem else

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

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 )

IF dentro/abaixo de IFs

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:

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")

Usando operadores lógicos, refazer este programa

IF abaixo do outro

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 - indentação

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?

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

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

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?
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?

e agora?

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

O que será impresso?

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!")

Funções - primeira visita

Funções

Exemplo de função:

a = input()

Definindo uma função

Definindo uma função

Uma função é definida da seguinte forma:

def nome(parâmetro1, ..., parâmetroN):
    comando
    ...
    return valor

Definindo uma função: Exemplo 1

A função abaixo recebe como parâmetro dois valores inteiros. A função faz a soma destes valores, e devolve o resultado.

def soma(a, b):
    c = a + b
    return c

Definindo uma função: Exemplo 2

Atenção: a definição da função tem que vir antes do seu uso!

r = leNumeroInt()
print("Número digitado: ", r)

def leNumeroInt():
   c = input("Digite um número inteiro: ")
   return int(c)

% python a.py 
Traceback (most recent call last):
  File "a.py", line 2, in <module>
    r = leNumeroInt()
NameError: name 'leNumeroInt' is not defined

Exemplo de função 3

def soma(a, b):
   c = a + b
   return c

x1 = 4 
x2 = -10
res = soma(5, 6)
print("Primeira soma: ",res)
res = soma(x1, x2)
print("Segunda soma: ",res)

Exemplo de função 4

def somaEsquisita(x, y) :
  x = x + 1
  y = y + 1
  return x + y


a=10
b=5
print ("Soma de a e b:", a + b)
print ("Soma de x e y:", somaEsquisita(a, b))
print ("a:", a)
print ("b:", b)

Os valores de a e b não são alterados por operações feitas em x e y

Retornando mais de um valor

uma funçao pode retornar mais de um valor (veremos que isso significa que a funçao retorna uma tupla).

def soma_diff(a,b):
    return a+b, a-b

>>> soma_dif(4,5)
(9,-1)

Programando em modo batch e testando no modo interativo

Uma forma interessante de trabalhar com o python e escrever um arquivo com as suas funções (inclusive a main()) e testar as funções em modo interativo.

Quando voce acha um erro, voce edita o arquivo com as funções, volta a carrega-lo e testa de novo.