Condicionais

Visão Geral

Perguntas
  • Como programas podem fazer várias coisas para diferentes dados?

Objetivos
  • Escreva corretamente programas que usam declarações if e else e expressões Booleanas simples (sem operadores lógicos).

  • Trace a execução de condicionais não-aninhadas e condicionais dentro de loops.

Use declarações if para controlar se um bloco de código será executado ou não.

# mwh para megawatts / hora
mwh = 3.54
if mwh > 3.0:
    print(mwh, 'é uma carga alta')

mwh = 2.07
if mwh > 3.0:
    print (mwh, 'é uma carga alta')
3.54 é uma carga alta

Condicionais são comumente usadas dentro de loops.

mwh = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in mwh:
    if m > 3.0:
        print(m, 'é uma carga alta')
3.54 é uma carga alta
9.22 é uma carga alta

Use else para executar um bloco de código quando uma condição if não é verdadeira.

mwh = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in mwh:
    if m > 3.0:
        print(m, 'é uma carga alta')
    else:
        print(m, 'é uma carga baixa')
3.54 é uma carga alta
2.07 é uma carga baixa
9.22 é uma carga alta
1.86 é uma carga baixa
1.71 é uma carga baixa

Use elif para especificar testes adicionais.

mwh = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in mwh:
    if m > 9.0:
        print(m, 'carga ENORME!')
    elif m > 3.0:
        print(m, 'é uma carga alta')
    else:
        print(m, 'é uma carga baixa')
3.54 é uma carga alta
2.07 é uma carga baixa
9.22 carga ENORME!
1.86 é uma carga baixa
1.71 é uma carga baixa

Condições são testadas uma vez, em ordem.

nota = 85
if nota >= 70:
    print('nota é C')
elif nota >= 80:
    print('nota é B')
elif nota >= 90:
    print('nota é A')
nota é C
velocidade = 10.0
if velocidade > 20.0:
    print('moving too fast')
else:
    print('ajustando velocidade')
    velocidade = 50.0
ajustando velocidade
velocidade = 10.0
for i in range(5): # execute o loop 5 vezes
    print(i, ':', velocidade)
    if velocidade > 20.0:
        print('indo muito rápido')
        velocidade = velocidade - 5.0
    else:
        print('indo muito devagar')
        velocidade = velocidade + 10.0
print('velocidade final:', velocidade)
0 : 10.0
indo muito devagar
1 : 20.0
indo muito devagar
2 : 30.0
indo muito rápido
3 : 25.0
indo muito rápido
4 : 20.0
indo muito devagar
velocidade final: 30.0

Crie uma tabela mostrando os valores das variáveis para traçar a execução de um programa.

i 0 . 1 . 2 . 3 . 4 .
velocidade 10.0 20.0 . 30.0 . 25.0 . 20.0 . 30.0

Relações Compostas usando and, or, e Parênteses

É normal precisarmos ter uma combinação de condições que sejam verdadeiras. Você pode combinar relações dentro de uma condicional usando and e or. Continuando o exemplo acima, suponha que você tenha

massa     = [ 3.54,  2.07,  9.22,  1.86,  1.71]
velocidade = [10.00, 20.00, 30.00, 25.00, 20.00]

i = 0
for i in range(5):
    if massa[i] > 5 and velocidade[i] > 20:
        print("Objeto pesado e rápido. Cuidado!")
    elif massa[i] > 2 and massa[i] <= 5 and velocidade[i] <= 20:
        print("Tráfego normal")
    elif massa[i] <= 2 and velocidade[i] <= 20:
        print("Objeto lento e leve. Ignore.")
    else:
        print("Tem algo errado com os dados. Verifique.")

Assim como qualquer aritmética, você deve usar parênteses sempre que haja uma possível ambiguidade. Uma boa regra geral é sempre usar parênteses quando se mistura and e or na mesma situação. Ou seja, invés de:

if massa[i] <= 2 or massa[i] >= 5 and velocidade[i] > 20:

escreva um desses:

if (massa[i] <= 2 or massa[i] >= 5) and velocidade[i] > 20:
if massa[i] <= 2 or (massa[i] >= 5 and velocidade[i] > 20):

assim fica perfeitamente claro para o Python (e para o leitor) o que isso realmente significa.

Traçando Execução

O que esse programa imprime?

pressao = 71.9
if pressao > 50.0:
    pressao = 25.0
elif pressao <= 50.0:
    pressao = 0.0
print(pressao)

Solução

25.0

Aparando Valores

Preencha os brancos para que o programa crie uma nova lista contendo zeros onde os valores anteriores da lista eram negativos e uns onde os valores anteriores da lista eram positivos.

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
resultado = ____
for valor in original:
    if ____:
        resultado.append(0)
    else:
        ____
print(resultado)
[0, 1, 1, 1, 0, 1]

Solução

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
resultado = []
for valor in original:
    if valor < 0.0:
        resultado.append(0)
    else:
        resultado.append(1)
print(resultado)

Processando Pequenos Arquivos

Modifique esse programa para que ele só processe arquivos com menos de 50 linhas.

import glob
import pandas as pd
for nome_arquivo in glob.glob('data/*.csv'):
    conteudo = pd.read_csv(nome_arquivo)
    ____:
        print(nome_arquivo, len(conteudo))

Solução

import glob
import pandas as pd
for nome_arquivo in glob.glob('data/*.csv'):
    conteudo = pd.read_csv(nome_arquivo)
    if len(conteudo) < 50:
        print(nome_arquivo, len(conteudo))

Inicializando

Modifique esse programa para que ele encontre o maior e menor valores da lista, não importa qual seja o intervalo de valores original.

valores = [...dados de teste...]
menor, maior = None, None
for v in valores:
    if ____:
        menor, maior = v, v
    ____:
        menor = min(____, v)
        maior = max(____, v)
print(menor, maior)

Quais são as vantagens e desvantagens de se usar esse método para achar o intervalo de valores?

Solução

valores = [-2,1,65,78,-54,-24,100]
menor, maior = None, None
for v in valores:
    if menor == None and maior == None:
        menor, maior = v, v
    else:
        menor = min(menor, v)
        maior = max(maior, v)
print(menor, maior)

Pode ser argumentado que uma vantagem de usar esse método seria tornar o código mais legível. No entanto, uma desvantagem é que esse código não é eficiente, pois a lista values é iterada três vezes: uma no for loop, e de novo quando max e min são chamadas. O método mais eficiente e que mantém a legibilidade, é iterar a lista somente uma vez:

valores = [-2,1,65,78,-54,-24,100]
menor, maior = None, None
for v in valores:
    if menor == None or v < menor:
        menor = v
    if maior == None or v > maior:
        maior = v
print(menor, maior)

Pontos-chave

  • Use declarações if para controlar se um bloco de código será executado ou não.

  • Condicionais são comumente usadas dentro de loops.

  • Use else para executar um bloco de código quando uma condição if não é verdadeira.

  • Use elif para especificar testes adicionais.

  • Condições são testadas uma vez, em ordem.

  • Crie uma tabela mostrando os valores das variáveis para traçar a execução de um programa.