A CEPA (Companhia Energética de Programação e Algoritmos) pretende disponibilizar em seu site um simulador de consumo com o qual seus clientes poderão estimar o valor de suas contas de energia com base na potência e tempo de uso de seus equipamentos elétricos. Como você está fazendo disciplina de programação e as férias estão chegando, resolveu se candidatar a uma vaga de emprego temporário na empresa, para criar o programa que fará os cálculos apresentados no site.
O consumo estimado de energia de cada equipamento de um cliente é calculado a partir do tempo médio de uso (em horas) e da potência do equipamento (Watts). O valor encontrado deve ser dividido por 1000 para que se tenha o consumo em KWH. Somando-se o consumo estimado de todos os equipamentos tem-se o consumo estimado total. Por fim, o valor final estimado da conta dependerá da bandeira em vigor naquele mês (conforme tabela 2) e do valor do ICMS (porcentagem de imposto sobre o valor total).
Faça então um programa que, tendo a tabela de potência de equipamentos abaixo (tabela 1), receba do usuário: a bandeira em vigor no mês, o valor do ICMS, a quantidade de equipamentos a ser informada e os equipamentos com o tempo médio de uso diário (em horas) e calcule o valor estimado da conta do usuário.
Obs: os dados das duas tabelas devem ser tratados como dicionários em seu programa.
Equipamento
Potencia (W)
ar-condicionado
1600
computador
350
chuveiro
5000
ferro
1000
lampada
32
lavadora-roupas
600
refrigerador
350
tv
200
Eandeira
Custo (KWH)
Verde
R$ 0,50
amarela
R$ 0,53
vermelha
R$ 0,56
| Equipamento | Potencia (W) |
| ar-condicionado | 1600 |
| computador | 350 |
| chuveiro | 5000 |
| ferro | 1000 |
| lampada | 32 |
| lavadora-roupas | 600 |
| refrigerador | 350 |
| tv | 200 |
| Eandeira | Custo (KWH) |
| Verde | R$ 0,50 |
| amarela | R$ 0,53 |
| vermelha | R$ 0,56 |
Passo 1
O que o enunciado pede e quais dados são fornecidos (peguei estes valores do enunciado):
-
Tabela de potências (equipamento → potência em Watts):
- ar-condicionado: 1600
- computador: 350
- chuveiro: 5000
- ferro: 1000
- lampada: 32
- lavadora-roupas: 600
- refrigerador: 350
- tv: 200
-
Tabela de bandeiras (bandeira → custo por kWh):
- Verde: R$ 0,50
- Amarela: R$ 0,53
- Vermelha: R$ 0,56
-
Entradas que o programa deve receber do usuário:
- A bandeira em vigor no mês (uma das três: verde/amarela/vermelha).
- O valor do ICMS (porcentagem sobre o valor total), por exemplo
. - A quantidade de equipamentos a ser informada (um inteiro
). - Para cada um dos
equipamentos: - o nome do equipamento (deve coincidir com alguma chave da tabela de potências);
- o tempo médio de uso diário (em horas), um número real não-negativo.
-
Observação/pressuposto necessário (porque o enunciado pede “uso diário” mas não diz o número de dias do mês):
- Vou adotar que o mês tem
dias. Essa é uma hipótese padrão para estimativas mensais quando o enunciado não especifica.
- Vou adotar que o mês tem
Passo 2
Quais fórmulas vamos usar — explicação didática, passo a passo.
- Consumo mensal de um equipamento i (em kWh):
- A potência do equipamento
está em Watts. Para obter energia em kWh precisamos transformar Watts em kW (dividindo por ) e multiplicar pelo número de horas de uso. Como temos horas por dia e dias no mês, a fórmula é:
Explicação:
(W) ×
(h/dia) ×
(dias) dá energia em Wh; dividir por
converte Wh → kWh.
- Consumo total do cliente (soma de todos os equipamentos):
- Cálculo do subtotal (antes de imposto): multiplicar o consumo total pelo custo da bandeira (
, em R$/kWh):
- Aplicar ICMS (
em porcentagem, por exemplo para 18%):
Observações práticas:
- Se o usuário digitar o nome do equipamento com maiúsculas/minúsculas diferentes, devemos normalizar (por exemplo, transformar em minúsculas e remover espaços extremos) antes de procurar na tabela.
- Se o nome não estiver na tabela, o programa deve avisar e pedir novamente (ou listar opções), porque a tabela foi dada e deve ser usada como dicionário.
Passo 3
Um exemplo numérico simples (para fixar a ideia). Peguei os valores da tabela para a lâmpada e para a bandeira verde.
- Suponha um equipamento “lampada” com
(W) usado horas/dia. Com dias:
- Se a bandeira for Verde com
R$/kWh, o custo deste consumo (subtotal parcial) é:
- Se o ICMS for
, o valor final referente a essa lâmpada seria:
Lição prática: fazer as contas na prova é só aplicar estas multiplicações e somas; a parte mais “chata” é organizar os dados e somar todos os equipamentos.
Passo 4
Estrutura lógica (algoritmo) para implementar o programa — passo a passo, como se fosse um roteiro que você pode transformar em código:
-
Definir os dicionários fixos conforme as tabelas do enunciado:
- equipments = { ‘ar-condicionado’:1600, ‘computador’:350, … }
- bandeiras = { ‘verde’:0.50, ‘amarela’:0.53, ‘vermelha’:0.56 }
-
Ler a entrada do usuário:
- ler e normalizar a string da bandeira; repetir até que seja uma chave válida em bandeiras;
- ler o valor do ICMS (float ou int);
- ler a quantidade de equipamentos
(inteiro >= 0).
-
Inicializar acumulador total_kwh = 0.
-
Para i de 1 até n:
- pedir o nome do equipamento; normalizar (por ex. lower() e strip());
- se o nome não estiver na tabela, avisar o usuário e pedir novamente (ou opcionalmente pular e não contar);
- ler o tempo médio diário
(float, >= 0); - calcular consumo_i usando a fórmula:
e somar em total_kwh.
-
Depois do laço:
- obter o custo por kWh a partir da bandeira escolhida:
; - calcular subtotal:
; - calcular valor_final com ICMS:
.
- obter o custo por kWh a partir da bandeira escolhida:
-
Apresentar para o usuário:
- consumo total em kWh (ex.: 2 ou 3 casas decimais);
- subtotal (R$ com duas casas decimais);
- valor final com ICMS (R$ com duas casas decimais).
Dicas de implementação:
- Use validação de entrada para evitar nomes desconhecidos e valores negativos de horas.
- Arredonde os valores monetários para 2 casas ao exibir (ex.: formatar com 2 casas decimais).
- Use constantes no início do programa (por exemplo D = 30) para facilitar mudanças.
Passo 5
Comportamento em casos-limite e estilo de usuário (boas práticas, para não perder pontos na prova):
- Se
— reportar consumo zero e valor zero. - Se alguma potência fosse 0 (não ocorre nas tabelas), o consumo seria zero.
- Se o usuário informar um equipamento com grafia diferente (ex.: “Ar-CondicionaDO” ou com acento), normalizar para minúsculas e, se quiser, aceitar sinônimos (por exemplo “ar condicionado” sem traço) mapeando esses sinônimos no dicionário.
- Documente no código que a suposição é
dias (o enunciado não definiu isso). - Complexidade: o algoritmo é linear no número de equipamentos
— trivial para qualquer entrada de prova.
Resposta
# Programa para estimativa de conta de energia (usa as tabelas do enunciado como dicionários)
def main():
# Dicionário de potências (Watts) — tabela 1
equipamentos = {
'ar-condicionado': 1600,
'computador': 350,
'chuveiro': 5000,
'ferro': 1000,
'lampada': 32,
'lavadora-roupas': 600,
'refrigerador': 350,
'tv': 200
}
# Dicionário de bandeiras (custo em R$/kWh) — tabela 2
bandeiras = {
'verde': 0.50,
'amarela': 0.53,
'vermelha': 0.56
}
D = 30 # dias do mês (pressuposto)
# Ler bandeira (validar)
while True:
bandeira = input("Bandeira (verde / amarela / vermelha): ").strip().lower()
if bandeira in bandeiras:
break
print("Bandeira inválida. Opções válidas:", ", ".join(bandeiras.keys()))
# Ler ICMS (porcentagem)
while True:
try:
icms = float(input("ICMS (%) (por exemplo, 18 para 18%): ").strip().replace(',', '.'))
if icms < 0:
print("ICMS não pode ser negativo.")
continue
break
except ValueError:
print("Digite um número válido para o ICMS.")
# Ler quantidade de equipamentos
while True:
try:
n = int(input("Quantidade de equipamentos a informar: ").strip())
if n < 0:
print("Quantidade não pode ser negativa.")
continue
break
except ValueError:
print("Digite um inteiro válido para a quantidade.")
total_kwh = 0.0
# Loop para ler cada equipamento
for i in range(1, n + 1):
# Ler nome do equipamento e validar com o dicionário
while True:
nome = input(f"Nome do equipamento {i} (use a grafia da tabela): ").strip().lower()
if nome in equipamentos:
potencia = equipamentos[nome] # em Watts
break
else:
print("Equipamento não encontrado na tabela. Opções válidas:", ", ".join(equipamentos.keys()))
# Ler tempo médio diário em horas
while True:
try:
horas = float(input(f"Tempo médio diário de uso do '{nome}' (horas): ").strip().replace(',', '.'))
if horas < 0:
print("Horas não podem ser negativas.")
continue
break
except ValueError:
print("Digite um número válido de horas (p.ex. 3.5).")
# Calcular consumo mensal em kWh para este equipamento
consumo_i = potencia * horas * D / 1000.0 # P(W) * h(dia) * D(dias) -> Wh; /1000 -> kWh
total_kwh += consumo_i
# Cálculo do custo
custo_kwh = bandeiras[bandeira]
subtotal = total_kwh * custo_kwh
valor_final = subtotal * (1 + icms / 100.0)
# Apresentar resultados formatados
print()
print("Resumo da estimativa:")
print(f"Consumo total estimado: {total_kwh:.3f} kWh")
print(f"Subtotal (sem ICMS): R$ {subtotal:.2f}")
print(f"ICMS: {icms:.2f} %")
print(f"Valor final estimado (com ICMS): R$ {valor_final:.2f}")
if __name__ == "__main__":
main()