Condicionais
Visão Geral
Perguntas
Como programas podem fazer várias coisas para diferentes dados?
Objetivos
Escreva corretamente programas que usam declarações
ifeelsee 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.
- Uma declaração
if(melhor chamada de declaração condicional) controla se um bloco de código será executado ou não. - A estrutura é similar a um
for:- Primeira linha abre com
ife acaba em dois pontos: - O corpo contendo um ou mais comandos é indentado (normalmente com 4 espaços).
- Primeira linha abre com
# 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.
- Não faz muito sentido usar uma condicional quando conhecemos o valor (como no exemplo acima).
- Mas é útil quando temos uma coleção de valores para processar.
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.
elsepode ser usado depois de umif.- Nos dá uma alternativa para execução se o ramo
ifnão é selecionado.
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.
- Podemos querer dar várias escolhas alternativas, cada uma com seu próprio teste.
- Use
elif(abreviação de “else if”, “senão se”) e uma condição para especificar isso. - Sempre é associado com um
if. - Deve vir antes do
else(que é o que pega “todo o resto”).
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.
- Python passa por todos os ramos da condicional em ordem, testando cada um por vez.
- Então a ordem importa.
nota = 85
if nota >= 70:
print('nota é C')
elif nota >= 80:
print('nota é B')
elif nota >= 90:
print('nota é A')
nota é C
- Uma condicional não volta automaticamente e é re-avaliada se valores mudarem.
velocidade = 10.0
if velocidade > 20.0:
print('moving too fast')
else:
print('ajustando velocidade')
velocidade = 50.0
ajustando velocidade
- É comum usar condicionais em um loop para “evoluir” valores das variáveis.
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 |
- O programa deve ter uma chamada para
printfora do corpo do loop para mostrar o valor final develocidadejá que seu valor é atualizado pela última iteração do loop.
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
andeor. Continuando o exemplo acima, suponha que você tenhamassa = [ 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
andeorna 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 noforloop, e de novo quandomaxeminsã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
ifpara controlar se um bloco de código será executado ou não.Condicionais são comumente usadas dentro de loops.
Use
elsepara executar um bloco de código quando uma condiçãoifnão é verdadeira.Use
elifpara 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.