(0.5) Deseja-se fazer um programa em Python para calcular qual a média de consumo do carro (
) em uma viagem. Antes de iniciar a viagem, o motorista abastece o carro por completo ( 35 litros) e zera o odômetro. A cada parada para abastecimento, o motorista anota a quantidade de litros colocada até encher o tanque e a quantidade de quilômetros percorrida deste a última parada. No final, assim que o motorista retorna a sua cidade de origem, ele abastece novamente o carro e faz a última anotação de quantidade de quilômetros percorrida. Seu programa em Python deve ler os dados anotados e informar o consumo médio do carro em km/l.
Passo 1
O enunciado dá as seguintes informações e pede isto:
- Informação: o motorista começa com o tanque cheio com
litros e zera o odômetro antes de sair. - Informação: a cada parada para abastecer o motorista anota dois valores:
- a quantidade de litros colocada até encher o tanque (vou chamar isso de litros colocados nessa parada), e
- a quantidade de quilômetros percorrida desde a última parada (vou chamar isso de quilômetros percorridos nessa parada).
- Informação: ao final da viagem, quando retorna à origem, ele abastece novamente e faz a última anotação de quilômetros percorridos (e também anota os litros colocados para encher).
- Pedido: escrever um programa em Python que leia essas anotações (os pares “litros colocados” e “quilômetros percorridos”) e informe o consumo médio do carro em
.
Observações importantes que saem do enunciado (sem começar ainda a resolver):
- Cada quantidade de litros anotada em uma parada corresponde exatamente ao combustível consumido desde a parada anterior (porque ele enche o tanque).
- Então para obter o total de combustível consumido basta somar todas as anotações de litros; para obter a distância total basta somar todas as anotações de quilômetros.
- O consumo médio pedido é a razão entre distância total percorrida e combustível total consumido.
Passo 2
Explicando a ideia matemática por trás do programa (muito importante para a prova, devagarinho):
-
Defina as variáveis que vamos usar:
-
= soma de todas as anotações de litros (combustível total consumido). -
= soma de todas as anotações de quilômetros (distância total percorrida). -
= consumo médio em .
-
-
Fórmula do consumo médio:
Isso é simples: consumo é distância dividida por combustível gasto. Cada termo:
-
é medido em quilômetros. -
é medido em litros. -
A divisão dá
. -
Importante: se por algum acaso
(situação inesperada, por exemplo entradas vazias), então o consumo não está definido — o programa deve tratar esse caso para não tentar dividir por zero.
Passo 3
Como ler os dados no programa (estratégia prática para implementar sem ambiguidade):
- Suposição razoável (e prática para uma entrada flexível): os dados virão como uma sequência de números lidos da entrada padrão, onde cada par representa primeiro os litros colocados e em seguida os quilômetros percorridos naquele trecho. Exemplo de linhas de entrada possíveis:
- “5.0 60” (colocou
litros e percorreu km) - repetir várias linhas até o fim do arquivo (EOF).
- “5.0 60” (colocou
- Implementação segura: ler toda a entrada, separar em tokens (palavras/números) e interpretar cada par consecutivo como
. - Se a entrada tiver número ímpar de tokens, devemos avisar ou ignorar o último token incompleto — na prática para a prova a entrada será bem formada (pares completos).
Passo 4
Algoritmo passo a passo (como eu faria na prova, escrito em forma de procedimento):
- Inicialize
e . - Leia todos os tokens numéricos da entrada (pode ser várias linhas).
- Percorra os tokens de dois em dois:
- para cada par, converta o primeiro token para número real e some em
; - converta o segundo token para número real e some em
.
- para cada par, converta o primeiro token para número real e some em
- Após ler tudo, verifique se
. Se sim, trate como caso especial (por exemplo, imprimir mensagem de erro ou devolver ). - Caso contrário, calcule
. - Imprima
com precisão adequada (por exemplo com 6 casas decimais) e identifique as unidades como se desejar.
Passo 5
Dicas didáticas sobre implementação e tipos de dados (para ajudar na prova):
- Use tipo float para litros e quilômetros (mesmo que quilômetros costume ser inteiro), porque a divisão pode dar resultado não inteiro.
- Ao somar muitos números use a operação simples de soma; não precisa de métodos especiais aqui.
- Para ler até o EOF em Python, uma forma simples é usar
sys.stdin.read()e depoissplit()para obter tokens independentemente de quebras de linha. - Sempre trate possíveis formatos com vírgula (
,): se for o seu caso, substitua vírgula por ponto antes da conversão. Mas em competições/avalições normalmente o separador decimal é ponto. - Formatação:
print("{:.6f}".format\text{(C)})mostra 6 casas decimais; ajuste conforme o que for pedido pelo enunciado da sua prova.
Passo 6
Exemplo concreto (pequena aula aplicada):
- Suponha que as anotações foram:
- Par 1:
litros e km. - Par 2:
litros e km. - Par 3:
litros e km.
- Par 1:
- Então:
-
litros. -
km. - Consumo médio:
-
- Na prova: faça as somas com calma e depois a divisão final; use frações simples se quiser conferir sem calculadora (por exemplo
).
Passo 7
Implementação em Python (explicando trechos):
- O código abaixo lê toda a entrada, pega tokens, interpreta pares
, soma e calcula o consumo médio. - Comentários no código explicam cada linha para você entender e poder reproduzir no papel ou digitá-lo rápido na prova.
Resposta
import sys
def main():
data = sys.stdin.read().strip().split()
if not data:
# sem dados: nada a calcular
print("0.000000")
return
if len(data) % 2 != 0:
# entrada com número ímpar de tokens: ignoramos o último token incompleto
# (poderia também escolher sinalizar erro)
data = data[:-1]
total_liters = 0.0
total_km = 0.0
# percorre os tokens de dois em dois: (litros, km)
for i in range(0, len(data), 2):
# converte strings para float; se sua entrada usar vírgula como decimal,
# você poderia fazer data[i].replace(',', '.') antes de float().
litros = float(data[i])
km = float(data[i+1])
total_liters += litros
total_km += km
if total_liters == 0.0:
# evita divisão por zero
print("0.000000")
return
consumo = total_km / total_liters
# imprime com 6 casas decimais (ajuste se necessário)
print("{:.6f}".format(consumo))
if __name__ == "__main__":
main()