Pular para conteúdo

Lista 06 · Muitos caminhos

Esta lista é sobre escolher entre três ou mais caminhos, e quase todos os erros dela são do mesmo tipo: o programa roda, não reclama e devolve a faixa errada.

Antes de rodar qualquer exercício, faça o teste no papel. Pegue um valor de cada faixa — e os valores de fronteira, que são os que pegam todo mundo — e siga a escada de elif com o dedo, de cima para baixo. Se algum elif nunca for alcançado, o problema é a ordem, não a condição.

O exercício 06 já vem escrito e errado. Ele é o mais importante da lista.

Abrir o OnlineGDB

Como esta lista funciona

Cada exercício abaixo é um arquivo só. Copie o código inteiro, cole no OnlineGDB, escreva a sua solução no lugar do # TODO e aperte ▶ Run.

Nos exercícios que mostram como deve ficar, compare a sua saída com a publicada aqui, linha por linha. Espaço a mais, acento faltando e letra maiúscula contam: o computador não relaxa em nenhum deles.

Parte A · no papel

Faça esta parte antes de ligar o computador

Escreva a resposta no caderno, depois rode para conferir. Prever e errar ensina; rodar primeiro e ler a saída, não.

A1. O que este programa imprime, e por quê?

minutos = 137
if minutos < 200:
    preco = 0.20
if minutos < 400:
    preco = 0.18
print(preco)

Troque o segundo if por elif e diga o que muda.

A2. Nesta escada, um dos elif nunca roda, para valor nenhum. Qual, e por quê?

if consumo >= 100:
    faixa = "media"
elif consumo >= 500:
    faixa = "alta"
else:
    faixa = "baixa"

Reescreva-a certa.

A3. Com idade = 14 e altura = 1.45, diga o valor de cada expressão:

idade >= 12 and altura >= 1.50
idade >= 12 or altura >= 1.50
not (idade >= 12)

A4. Este programa imprime Fim de semana para qualquer valor de dia. Explique por quê, e conserte.

if dia == "sabado" or "domingo":
    print("Fim de semana")
else:
    print("Dia util")

A5. Preencha a tabela para o programa do exercício 02, com as faixas abaixo de 200, de 200 a 399 e de 400 em diante:

minutos preço esperado
0
199
200
399
400
1000

São os seis valores que você deve testar em qualquer exercício de faixa: os dois extremos e as duas fronteiras, de cada lado.

A6. Reescreva este trecho sem o if aninhado, usando and:

if idade >= 18:
    if tem_carteira:
        print("Pode dirigir")

Parte B · no computador

Exercício 01

Escreva um programa que pergunte um número e mostre se ele é positivo, negativo ou zero.

Escreva exatamente essas três palavras, em minúsculas e sem acento.

Rode o programa também com estes números e confira cada resposta:

Número Resposta esperada
7 positivo
-3 negativo
0.5 positivo
-0.5 negativo

Como deve ficar. Rodando o programa e digitando 0, a tela tem de ficar assim:

Digite um numero: 0
zero
# Exercício 01 — positivo, negativo ou zero.
# TODO: pergunte um numero.
# TODO: use if, elif e else para os tres casos.
# TODO: mostre a palavra correspondente.

Baixar ex01.py

Exercício 02

A operadora cobra por faixa de consumo:

Minutos no mês Preço por minuto
abaixo de 200 R$ 0,20
de 200 a 399 R$ 0,18
de 400 em diante R$ 0,15

Escreva um programa que pergunte quantos minutos o cliente falou no mês e mostre o preço por minuto da faixa dele, com duas casas decimais.

Confira as fronteiras: 200 minutos já são a faixa do meio, e 400 já são a faixa de cima.

Rode o programa também com estes valores e confira cada resposta — são os seis da tabela da Parte A:

Minutos Preço esperado
0 R$ 0,20
199 R$ 0,20
399 R$ 0,18
400 R$ 0,15
1000 R$ 0,15

Como deve ficar. Rodando o programa e digitando 200, a tela tem de ficar assim:

Minutos falados no mes: 200
Minutos: 200
Preco por minuto: R$ 0.18
# Exercício 02 — o preço da faixa de consumo.
# TODO: pergunte quantos minutos o cliente falou no mes.
# TODO: escada de if/elif/else com as tres faixas, na ordem certa.
# TODO: mostre o preco por minuto com duas casas decimais.

Baixar ex02.py

Exercício 03

Uma competição de atletismo separa os participantes em categorias:

Idade Categoria
até 12 anos Infantil
de 13 a 17 Juvenil
18 ou mais Adulto

Escreva um programa que pergunte a idade do participante e mostre a categoria. Idade zero ou negativa não é categoria nenhuma: nesse caso, mostre Idade invalida.

Comece a escada pelo teste que rejeita. Depois dele, você já sabe que a idade é positiva, e o resto fica simples.

Rode o programa também com estas idades e confira cada resposta:

Idade Resposta esperada
10 Infantil
12 Infantil
13 Juvenil
17 Juvenil
18 Adulto
70 Adulto
-5 Idade invalida

Como deve ficar. Rodando o programa e digitando 0, a tela tem de ficar assim:

Idade do participante: 0
Idade invalida
# Exercício 03 — a categoria do participante.
# TODO: pergunte a idade.
# TODO: rejeite idade <= 0 primeiro, depois classifique nas tres faixas.
# TODO: mostre a categoria.

Baixar ex03.py

Exercício 04

Um brinquedo do parque exige pelo menos 12 anos e pelo menos 1,50 m. As duas exigências valem ao mesmo tempo: quem tem 30 anos e 1,40 m também não entra.

Escreva um programa que pergunte a idade e a altura da pessoa e mostre Pode entrar ou Nao pode entrar.

Resolva com uma condição só, usando and. Quem tem exatamente 12 anos e exatamente 1,50 m entra.

Rode o programa também com estes valores e confira cada resposta:

Idade Altura Resposta esperada
14 1.62 Pode entrar
12 1.50 Pode entrar
14 1.45 Nao pode entrar
10 1.70 Nao pode entrar
11 1.49 Nao pode entrar

Como deve ficar. Rodando o programa e digitando 30, 1.40, a tela tem de ficar assim:

Idade: 30
Altura em metros: 1.40
Nao pode entrar
# Exercício 04 — a entrada do brinquedo.
idade_minima = 12
altura_minima = 1.50

# TODO: pergunte a idade e a altura da pessoa.
# TODO: junte as duas condicoes com and, num if so.
# TODO: mostre "Pode entrar" ou "Nao pode entrar".

Baixar ex04.py

Exercício 05

O aplicativo da operadora mostra a qualidade do sinal em palavras, a partir do percentual de intensidade que o celular mede:

Intensidade Qualidade
75% ou mais Otimo
de 50% a 74% Bom
de 25% a 49% Fraco
abaixo de 25% Sem sinal

Escreva um programa que pergunte o percentual de intensidade e mostre a palavra correspondente.

Como as faixas são "a partir de", use >= e comece pela maior. Na ordem inversa, o primeiro teste captura todo mundo e as outras três faixas viram enfeite.

Rode o programa também com estes percentuais e confira cada resposta:

Percentual Resposta esperada
100 Otimo
74 Bom
50 Bom
49 Fraco
25 Fraco
24 Sem sinal
0 Sem sinal

Como deve ficar. Rodando o programa e digitando 75, a tela tem de ficar assim:

Intensidade do sinal em %: 75
Otimo
# Exercício 05 — a qualidade do sinal em palavras.
# TODO: pergunte o percentual de intensidade do sinal.
# TODO: escada de elif com >=, da maior faixa para a menor.
# TODO: mostre a palavra da faixa.

Baixar ex05.py

Exercício 06

Este exercício é sobre um erro, e é o mais importante da lista.

O programa abaixo deveria dizer se o dia informado é dia útil ou fim de semana. Ele não dá erro nenhum — e responde fim de semana para qualquer dia que você digitar, inclusive para quarta.

dia = input("Dia da semana: ")

if dia == "sabado" or "domingo":
    print(f"{dia} e fim de semana.")
else:
    print(f"{dia} e dia util.")
  1. Rode-o como está, digitando quarta, e veja a resposta errada aparecer sem nenhum aviso.
  2. Conserte a condição.
  3. Escreva, num comentário no fim, por que o original errava.

Guarde este caso junto com o da Lista 03. O sintoma é sempre o mesmo: um dos caminhos do programa nunca acontece, e nada no computador reclama disso.

Como deve ficar. Rodando o programa e digitando quarta, a tela tem de ficar assim:

Dia da semana: quarta
quarta e dia util.
# Exercício 06 — o dia útil que nunca chega.
# TODO: conserte a condicao do if abaixo.
dia = input("Dia da semana: ")

if dia == "sabado" or "domingo":
    print(f"{dia} e fim de semana.")
else:
    print(f"{dia} e dia util.")

# TODO: explique aqui por que a condicao original era sempre verdadeira.

Baixar ex06.py